% LATEX VERSION 2.09 <7 Dec 1989>
% Copyright (C) 1988 by Leslie Lamport

\everyjob{\typeout{LaTeX Version 2.09 <7 Dec 1989>}}
\immediate\write10{LaTeX Version 2.09 <7 Dec 1989>}

%                 TABLE OF CONTENTS 
% COMMAND LIST .........................................  2
% GENERAL CONVENTIONS ..................................  6
% COUNTERS, ETC. .......................................  7
% USEFUL HACKS .........................................  8
% ERROR HANDLING ....................................... 12
% \par AND \everypar ................................... 15
% SPACING / LINE AND PAGE BREAKING ..................... 17
% PROGRAM CONTROL STRUCTURE MACROS ..................... 21
% FILE HANDLING ........................................ 24
% ENVIRONMENT COUNTER MACROS ........................... 27
% PAGE NUMBERING ....................................... 30
% CROSS REFERENCING MACROS  ............................ 31
% ENVIRONMENTS ......................................... 33
% MATH ENVIRONMENTS .................................... 36
% CENTER, FLUSHRIGHT, FLUSHLEFT, ETC. .................. 39
% VERBATIM ............................................. 40
% THE LIST ENVIRONMENT ................................. 41
% ITEMIZE AND ENUMERATE ................................ 49
% BOXES ................................................ 51
% THE TABBING ENVIRONMENT .............................. 57
% ARRAY AND TABULAR ENVIRONMENTS ....................... 63
% THE PICTURE ENVIRONMENT .............................. 72
% THEOREM ENVIRONMENTS ................................. 86
% LENGTHS .............................................. 88
% THE TITLE .............................................89
% SECTIONING ........................................... 90
% TABLE OF CONTENTS, ETC. .............................. 94
% INDEX COMMANDS ....................................... 97
% BIBLIOGRAPHY ......................................... 98
% FLOATS .............................................. 100
% FOOTNOTES ........................................... 106
% INITIAL DECLARATION COMMANDS ........................ 110
% OUTPUT .............................................. 113
% DEBUGGING AND TEST INITIALIZATIONS  ................. 137


\catcode`\~=13 \def~{\penalty\@M \ }


%     ****************************************
%     *           COMMAND LIST               *
%     ****************************************
%
% DECLARATIONS:
%  PREAMBLE:     \nofiles \documentstyle \includeonly
%                \makeindex \makeglossary 
%  IN DOCUMENT : 
%    FONT SELECTION: 
%         SIZE: \normalsize \small \footnotesize \scriptsize \tiny
%               \large \Large \LARGE \huge \Huge
%         STYLE: \bf \it \rm \sl \ss \tt \mit[math mode only]
%    STYLE: 
%         PAGE: [all global] \pagestyle \thispagestyle \pagenumbering \head 
%         MISC: \raggedright \thicklines \thinlines 
%    PARAMETER: \setlength \settowidth \addtolength \setcounter \addtocounter
%    NEW:       \newlength \newtheorem \newcommand
%    MISC:      \savebox \sbox \obeycr \restorecr
%    
% ENVIRONMENTS:
%    ?   -> PAR:  document 
%   PAR  -> PAR:  list enumerate itemize description
%                 center flushright flushleft
%                 verbatim picture float
%   PAR  -> BOX:  tabular tabbing 
%   PAR  -> MATH: math displaymath equation 
%   MATH -> MATH: array 
%   ANY  -> PAR:  minipage
%   ANY  -> BOX:  stack
%
% TEXT-PRODUCING: 
%   WITH TEXT ARGUMENT: 
%      ANY -> BOX: \makebox \mbox \framebox \fbox \dashbox 
%                  \shortstack \footnotemark \cite[] \raisebox
%      ANY -> PAR: \parbox[inner]
%      PAR -> PAR: \chapter \section ... \footnote \footnotetext
%                  \topnewpage \verb
%      MATH:       \sqrt \underline \overline
%      PICTURE:    \put \multiput 
%      LIST:       \item
%   WITHOUT TEXT ARGUMENT:
%     ANY MODE: 
%          SYMBOLS: \$ \{ \} \_ \@ \& \#
%          ACCENTS: See TeXbook
%          OTHER:   \rule \ref \pageref \today \usebox \typein \input \cite
%     MATH:     \over
%     PAR MODE: \include \bibliography \tableofcontents \listoffigures ...
%     LIST:     \item \arabic \roman \Roman \alph \Alph
%     PICTURE:  \line \vector \circle \oval 
%     ARRAY & TABULAR: \hline \vline
%          
% SPACING & BREAKING:
%    ANY       : \hfill \hspace 
%    PAR       : \newpage \newpage \vspace \noindent 
%    PAR & INNER MATH
%              : \newpage \clearpage \cleardoublepage
%              : \pagebreak \nopagebreak \linebreak \nolinebreak \newline 
%    MATH      : \over \; \, \!
%    MULTILINE : \\
%    TABBING   : \pushtab \poptab \> \< \+ \- \kill ... 
%    ARRAY & TABULAR 
%              : \multicolumn \noalign  
%
% NO DIRECT CHANGES TO DOCUMENT:
%    \index \glossary \typeout \label \tableentry \stop \protect
%       
% PARAMETERS:
%
% \columnsep         \skip\footin        \intextsep        
% \columnseprule                         \oddsidemargin    
% \columnwidth                           \textfloatsep     
% \evensidemargin    \footsep            \textheight       
% \floatsep          \headheight         \textwidth        
% \headsep            \topmargin        


%   ALPHABETIZED LIST:
%
% ORDINARY COMMANDS:
% 
% \Alph                \include             \parbox             
% \Roman               \index               \put                
% \\                   \item                \raisebox           
% \alph                \label               \ref                
% \appendix            \line                \roman              
% \arabic              \linebreak           \rule               
% \bibliography        \listoffigures       \section            
% \chapter             \listoftables        \shortstack         
% \circle              \makebox             \stop               
% \cite                \mbox                \subsection         
% \cite                \multicolumn         \subsubsection      
% \cleardoublepage     \multiput            \tableentry         
% \clearpage                                \tableofcontents    
% \dashbox             \newline             \today              
% \fbox                \newpage             \typein             
% \footnotemark        \noindent            \typeout            
% \footnotetext        \nolinebreak         \usebox             
% \framebox            \nopagebreak         \vector             
% \glossary            \oval                \vline              
% \hline               \pagebreak           \vspace             
% \hspace              \pageref             \protect
% 
% 
% ENVIRONMENTS & DECLARATIONS:
% 
% For each of these commands, the same command name prefixed by 'end'
% is also reserved--e.g., \enddocument.
% 
% \BIG               \footnotesize       \pagestyle           
% \Big               \head               \picture             
% \addtocounter      \includeonly        \raggedright         
% \addtolength       \itemize            \restorecr           
% \array             \list               \savebox             
% \big               \makeglossary       \sbox                
% \center            \makeindex          \scriptscriptsize    
% \description       \math               \scriptsize          
% \displaymath       \minipage           \setcounter          
% \document          \newcommand         \setlength           
% \documentstyle     \newlength          \settowidth          
% \enumerate         \newtheorem         \small               
% \equation          \nofiles            \shortstack\tabbing       
%                    \normalsize             \tabular             
% \float             \obeycr             \thicklines          
% \flushleft         \pagelayout         \thinlines           
% \flushright        \pagenumbering      \thispagestyle       
%                                        \verb, \verbatim
% 
% PARAMETERS :
% 
% \columnsep         \footinsertskip     \intextsep        
% \columnseprule                         \oddsidemargin    
% \columnwidth                           \textfloatsep     
% \evensidemargin    \footsep            \textheight       
% \floatsep          \headheight         \textwidth        
% \headsep            \topmargin        
% 
% 
% TABBING COMMANDS:
% 
% These commannds are defined only within a tabbing environment.
% 
% \kill      \>    \- 
% \pushtab   \<    \=
% \poptab    \+ 


% COMPLETE LIST :
% Below is a complete list of every command starting with `\' that
% appears in LATEX.TEX.

% \ 
% \!
% \#
% \$
% \&
% \'
% \(
% \)
% \+
% \,
% \-
% \.
% \:
% \;
% \<
% \=
% \>
% \@
% \@@
% \@@end
% \@@endpbox
% \@@eqncr
% \@@hyph
% \@@input
% \@@par
% \@@sqrt
% \@@startpbox
% \@@underline
% \@acci
% \@accii
% \@acciii
% \@acol
% \@acolampacol
% \@addamp
% \@addfield
% \@addmarginpar
% \@addtobot
% \@addtocurcol
% \@addtodblcol
% \@addtonextcol
% \@addtopreamble
% \@addtoreset
% \@addtotoporbot
% \@afterheading
% \@afterindentfalse
% \@afterindenttrue
% \@Alph
% \@alph
% \@ampacol
% \@arabic
% \@argarraycr
% \@argdef
% \@argrsbox
% \@argtabularcr
% \@array
% \@arrayacol
% \@arrayclassiv
% \@arrayclassv
% \@arrayclassz
% \@arraycr
% \@arrayparboxrestore
% \@arrayrule
% \@arstrut
% \@arstrutbox
% \@auxout
% \@badcrerr
% \@badend
% \@badlinearg
% \@badmath
% \@badpoptabs
% \@badtab
% \@beginparpenalty
% \@begintheorem
% \@bibitem
% \@biblabel
% \@bitor
% \@botlist
% \@botnum
% \@botroom
% \@bsphack
% \@caption
% \@captype
% \@car
% \@carcube
% \@cclv
% \@cdr
% \@centercr
% \@centering
% \@cfla
% \@cflb
% \@charlb
% \@charrb
% \@chclass
% \@checkend
% \@chnum
% \@circ
% \@circle
% \@circlefnt
% \@cite
% \@citea
% \@citeb
% \@citex
% \@cla         % counter used in \cline
% \@classi
% \@classii
% \@classiii
% \@classiv
% \@classv
% \@classz
% \@clb         % counter used in \cline
% \@cline
% \@clnht
% \@clnwd
% \@clubpenalty
% \@colht
% \@colnum
% \@colroom
% \@combinedblfloats
% \@combinefloats
% \@comdblflelt
% \@comflelt
% \@cons
% \@contfield
% \@ctrerr
% \@curfield
% \@curline
% \@currbox
% \@currentlabel
% \@currentreference
% \@currenvir
% \@currlist
% \@currtype
% \@curtab
% \@curtabmar
% \@dascnt
% \@dashbox
% \@dashcnt
% \@dashdim
% \@dblarg
% \@dbldeferlist
% \@dblfloat
% \@dblfloatplacement
% \@dblfloatsep
% \@dblfpbot
% \@dblfpsep
% \@dblfptop
% \@dblmaxsep
% \@dbltextfloatsep
% \@dbltoplist
% \@dbltopnum
% \@dbltoproom
% \@deferlist
% \@definecounter
% \@defpar
% \@depth
% \@dischyph
% \@doclearpage
% \@documentstyle
% \@doendpe
% \@donoparitem
% \@dot
% \@dotsep
% \@dottedtocline
% \@downline
% \@downvector
% \@eha
% \@ehb
% \@ehc
% \@ehd
% \@elt
% \@empty
% \@endparenv
% \@endparpenalty
% \@endpbox
% \@endpefalse
% \@endpetrue
% \@endtabbing
% \@endtheorem
% \@enumctr
% \@enumdepth
% \@enumspacing
% \@eqncr
% \@eqnnum
% \@eqnsel
% \@eqnswtrue
% \@esphack
% \@evenfoot
% \@evenhead
% \@expast
% \@failedlist
% \@fcolmadefalse
% \@filesw
% \@fileswfalse
% \@fileswtrue
% \@firstampfalse
% \@firstamptrue
% \@firstcolumntrue
% \@firsttab
% \@flfail
% \@float
% \@floatpenalty
% \@floatplacement
% \@floatsep
% \@flsucceed
% \@fltovf
% \@flushglue
% \@fnsymbol
% \@footnotemark
% \@footnotetext
% \@for
% \@forloop
% \@fornoop
% \@fpbot
% \@fpmin
% \@fpsep
% \@fptop
% \@framebox
% \@framepicbox
% \@freelist
% \@getcirc
% \@getlarrow
% \@getlinechar
% \@getpen
% \@getrarrow
% \@glossaryfile
% \@gobble
% \@gobblecr
% \@gobbletwo
% \@gtempa
% \@halfwidth
% \@halignto
% \@hangfrom
% \@height
% \@highpenalty
% \@hightab
% \@hline
% \@holdpg
% \@hspace
% \@hspacer
% \@hvector
% \@icentercr
% \@iden
% \@ifatmargin
% \@ifdefinable
% \@ifnch
% \@ifnextchar
% \@iforloop
% \@iframebox
% \@iframepicbox
% \@ifstar
% \@ifundefined
% \@iinput           % used in \input
% \@iirsbox
% \@imakebox
% \@imakepicbox
% \@iminipage
% \@index
% \@indexfile
% \@inlabelfalse
% \@input
% \@insertfalse
% \@inserttrue
% \@iparbox
% \@irsbox
% \@isavebox
% \@isavepicbox
% \@ishortstack
% \@istackcr
% \@itabcr
% \@item
% \@itemdepth
% \@itemfudge
% \@itemitem
% \@itemlabel
% \@itempenalty
% \@itemspacing
% \@iwhiledim
% \@iwhilenum
% \@iwhilesw
% \@ixstackcr
% \@killglue
% \@labels
% \@lastchclass
% \@latexbug
% \@latexerr
% \@lbibitem
% \@leftcolumn
% \@leftmarginskip
% \@leftmark
% \@lhead
% \@linechar
% \@linefnt
% \@linelen
% \@list
% \@listctr
% \@listdepth
% \@listi
% \@listii
% \@listvi
% \@lnbk
% \@lowpenalty
% \@lquote
% \@ltab
% \@M
% \@m
% \@mainaux
% \@mainout
% \@makebox
% \@makecaption
% \@makecol
% \@makefcolumn
% \@makefnmark
% \@makefntext
% \@makeonecolumn
% \@makeother
% \@makepicbox
% \@maketwocolumn
% \@marbox
% \@markright
% \@maxdepth
% \@maxsep
% \@maxtab
% \@medpenalty
% \@Mi
% \@midlist
% \@Mii
% \@Miii
% \@minipagefalse
% \@minipagerestore
% \@Miv
% \@mkboth
% \@mklab
% \@mkpream
% \@MM
% \@mparbottom
% \@mparswitchfalse
% \@mpfn
% \@mpfnnumber
% \@mpfootins
% \@mpfootnotetext
% \@mplistdepth
% \@multicnt
% \@namedef
% \@nameuse
% \@nbitem
% \@ne
% \@negargfalse
% \@negargtrue
% \@newctr
% \@newenv
% \@newline
% \@newlist
% \@newlistfalse
% \@next
% \@nextchar
% \@nextwhile
% \@nil
% \@nmbrlistfalse
% \@nmbrlisttrue
% \@nnil
% \@nobreakfalse
% \@nocnterr
% \@nodocument
% \@nofonterror
% \@noitemargfalse
% \@noitemargtrue
% \@noitemerr
% \@noligs
% \@nolnbk
% \@nolnerr
% \@noparitemfalse
% \@noparitemtrue
% \@noparlistfalse
% \@noparlisttrue
% \@nopgbk
% \@normalcr
% \@normalsize
% \@noskipsecfalse
% \@notdefinable
% \@notprerr
% \@nthm
% \@nxttabmar
% \@oddfoot
% \@oddhead
% \@opargbegintheorem
% \@opcol
% \@optionfiles
% \@optionlist
% \@options
% \@othm
% \@outerparskip
% \@outputbox
% \@outputdblcol
% \@outputpage
% \@oval
% \@ovbtrue
% \@ovdx
% \@ovdy
% \@ovhorz
% \@ovltrue
% \@ovri
% \@ovro
% \@ovrtrue
% \@ovttrue
% \@ovvert
% \@ovxx
% \@ovyy
% \@pagedp
% \@pageht
% \@par
% \@parboxrestore
% \@parmoderr
% \@partaux
% \@partlist
% \@partout
% \@partsw
% \@partswfalse
% \@partswtrue
% \@pboxswfalse
% \@pboxswtrue
% \@pgbk
% \@picbox
% \@picht
% \@picture
% \@pnumwidth
% \@preamble
% \@preamblecmds
% \@preamerr
% \@put
% \@qend
% \@qrelax
% \@reargdef
% \@renewenv
% \@restorepar
% \@reversemarginfalse
% \@reversemargintrue
% \@rhead
% \@rightmark
% \@rightskip
% \@Roman
% \@roman
% \@rsbox
% \@rtab
% \@rule
% \@sanitize
% \@savebox
% \@savemarbox
% \@savepicbox
% \@savsf
% \@savsk
% \@scolelt
% \@sdblcolelt
% \@secpenalty
% \@sect
% \@setpar
% \@settab
% \@sharp
% \@shortstack
% \@sline
% \@spaces
% \@specialoutput
% \@specialpagefalse
% \@specialstyle
% \@sptoken
% \@sqrt
% \@ssect
% \@startcolumn
% \@startdblcolumn
% \@startfield
% \@startline
% \@startpbox
% \@startsection
% \@starttoc
% \@stopfield
% \@stopline
% \@stpelt
% \@svector
% \@sverb
% \@svsec
% \@svsechd
% \@tabacol
% \@tabarray
% \@tabclassiv
% \@tabclassz
% \@tabcr
% \@tablab
% \@tabminus
% \@tabplus
% \@tabpush
% \@tabrj
% \@tabular
% \@tabularcr
% \@temp
% \@tempa
% \@tempb
% \@tempbox
% \@tempboxa
% \@tempc
% \@tempcnta
% \@tempcntb
% \@tempd
% \@tempdima
% \@tempdimb
% \@tempe
% \@tempskipa
% \@tempskipb
% \@tempswa
% \@tempswafalse
% \@tempswatrue
% \@temptokena
% \@testdef
% \@testfp
% \@testpach
% \@textbottom
% \@textfloatsep
% \@textmin
% \@texttop
% \@tfor
% \@tforloop
% \@thanks
% \@thefnmark
% \@thefoot
% \@thehead
% \@themargin
% \@themark
% \@thm
% \@thmcounter
% \@thmcountersep
% \@tocrmarg
% \@toodeep
% \@toplist
% \@topnewpage
% \@topnum
% \@toproom
% \@topsep
% \@topsepadd
% \@totalleftmargin
% \@trivlist
% \@tryfcolumn
% \@trylist
% \@twocolumnfalse
% \@twoside
% \@twosidefalse
% \@typein
% \@upline
% \@upordown
% \@upvector
% \@verb
% \@verbatim
% \@vline
% \@vobeyspaces
% \@vspace
% \@vspacer
% \@vtryfc
% \@vvector
% \@warning
% \@wckptelt
% \@whiledim
% \@whilenoop
% \@whilenum
% \@whilesw
% \@whileswnoop
% \@wholewidth
% \@width
% \@wrindex
% \@writeckpt
% \@writefile
% \@wtryfc
% \@x@sf
% \@xarg
% \@xargarraycr
% \@xarraycr
% \@xbitor
% \@xcentercr
% \@xdblarg
% \@xdblfloat
% \@xdim
% \@xeqncr
% \@xexnoop
% \@xexpast
% \@xfloat
% \@xfootnote
% \@xfootnotemark
% \@xfootnotenext
% \@xhead
% \@xifnch
% \@xmpar
% \@xnewline
% \@xnthm
% \@xobeysp
% \@xsect
% \@xstartcol
% \@xtabcr
% \@xtabularcr
% \@xthm
% \@xtryfc
% \@xtypein
% \@xverbatim
% \@xxxii
% \@xympar
% \@yarg
% \@yargarraycr
% \@ydim
% \@yeqncr
% \@yhead
% \@ympar
% \@ynthm
% \@ythm
% \@ytryfc
% \@yyarg
% \@ztryfc
% \a
% \active
% \addcontentsline
% \addpenalty
% \addtocontents
% \addtocounter
% \addtolength
% \addvspace
% \advance
% \alloc@
% \allocationnumber
% \Alph
% \alph
% \and
% \appendix
% \arabic
% \array
% \arraycolsep
% \arrayrulewidth
% \arraystretch
% \author
% \bar
% \baselineskip
% \begin
% \begingroup
% \bf
% \bgroup
% \bibcite
% \bibdata
% \bibitem
% \bibliography
% \bibliographystyle
% \bibstyle
% \BIG
% \Big
% \big
% \bigskip
% \botfigrule
% \botmark
% \botnum
% \bottomfraction
% \box
% \boxmaxdepth
% \buildrel
% \bullet
% \c@bottomnumber
% \c@chapter
% \c@dbltopnumber
% \c@equation
% \c@eval
% \c@footnote
% \c@mpfootnote
% \c@page
% \c@secnumdepth
% \c@section
% \c@tocdepth
% \c@topnumber
% \c@totalnumber
% \caption
% \catcode
% \catcoded
% \center
% \centering
% \chapter
% \chaptermark
% \char
% \chardef
% \circle
% \cite
% \cl@@ckpt
% \cleardoublepage
% \clearpage
% \cline
% \closeout
% \clubpenalty
% \columnsep
% \columnseprule
% \columnwidth
% \contentsline
% \copy
% \count
% \countdef
% \cr
% \crcr
% \csname
% \dag
% \dagger
% \dashbox
% \date
% \dblfigrule
% \dblfloatpagefraction
% \dblfloatsep
% \dbltexfloatsep
% \dbltextfloatsep
% \dbltopfraction
% \ddagger
% \deadcycles
% \def
% \description
% \dimen
% \dimen@
% \discretionary
% \displaymath
% \displaystyle
% \displaywidth
% \divide
% \do
% \document
% \documentstyle
% \dospecials
% \doublerulesep
% \dp
% \edef
% \egroup
% \else
% \end
% \end@dblfloat
% \end@float
% \endarray
% \endcsname
% \enddocument
% \endenumerate
% \endequation
% \endfigure
% \endgroup
% \enditemize
% \endlist
% \endpicture
% \endsloppypar
% \endtabbing
% \endtabular
% \endthebibliography
% \endtrivlist
% \enumerate
% \eqnarray
% \eqno
% \equation
% \errmessage
% \errorstopmode
% \eval
% \evensidemargin
% \everyjob
% \everypar
% \expandafter
% \extracolsep
% \fbox
% \fboxrule
% \fboxsep
% \fi
% \figure
% \fill
% \firstmark
% \float
% \floatingpenalty
% \floatpagefraction
% \floatsep
% \flushbottom
% \flushleft
% \flushright
% \fnsymbol
% \footins
% \footinsertskip
% \footnote
% \footnotemark
% \footnoterule
% \footnotesep
% \footnotesize
% \footnotetext
% \footsep
% \footskip
% \frac
% \frame
% \framebox
% \framerule
% \framesep
% \frenchspacing
% \fussy
% \futurelet
% \gdef
% \global
% \glossary
% \halfwidth
% \halign
% \hangindent
% \hbox
% \head
% \headheight
% \headsep
% \hfil
% \hfill
% \hfuzz
% \hline
% \hrule
% \hsize
% \hskip
% \hspace
% \hss
% \ht
% \Huge
% \huge
% \hyphenchar
% \if
% \if@afterindent
% \if@eqnsw
% \if@endpe
% \if@fcolmade
% \if@filesw
% \if@firstamp
% \if@firstcolumn
% \if@ignore
% \if@inlabel
% \if@insert
% \if@minipage
% \if@mparswitch
% \if@negarg
% \if@newlist
% \if@nmbrlist
% \if@nobreak
% \if@noitemarg
% \if@noparitem
% \if@noparlist
% \if@noskipsec
% \if@ovb
% \if@ovl
% \if@ovr
% \if@ovt
% \if@pboxsw
% \if@reversemargin
% \if@rjfield
% \if@specialpage
% \if@tempswa
% \if@test
% \if@twocolumn
% \if@twoside
% \ifcase
% \ifdim
% \ifeof
% \ifhmode
% \ifinner
% \ifmmode
% \ifnum
% \ifodd
% \ifvmode
% \ifvoid
% \ifx
% \ignorespaces
% \immediate
% \include
% \includeonly
% \indent
% \index
% \indexentry
% \input
% \insc@unt
% \insert
% \interdisplaylinepenalty
% \interfootnotelinepenalty
% \interlinepenalty
% \intextsep
% \it
% \item
% \itemindent
% \itemize
% \itemsep
% \jobname
% \kern
% \kill
% \label
% \labelenumi
% \labelenumiv
% \labelitemi
% \labelitemii
% \labelitemiii
% \labelitemiv
% \labelsep
% \labelwidth
% \LARGE
% \Large
% \large
% \lastbox
% \lastskip
% \LaTeX
% \lbrace
% \leaders
% \leavevmode
% \lefteqn
% \leftmargin
% \leftmargini
% \leftmarginvi
% \leftmark
% \leftskip
% \let
% \limits
% \line
% \linebreak
% \lineskip
% \linethickness
% \linewidth
% \list
% \listoffigures
% \listoftables
% \listparindent
% \llap
% \long
% \lower
% \m@ne
% \m@th
% \makeatletter
% \makeatother
% \makebox
% \makeglossary
% \makeindex
% \makelabel
% \maketitle
% \marginpar
% \marginparpush
% \marginparsep
% \marginparwidth
% \mark
% \markboth
% \markright
% \math
% \mathchar
% \mathchardef
% \mathop
% \mathrel
% \maxdeadcycles
% \maxdepth
% \maxdimen
% \mb@b
% \mb@eval
% \mb@l
% \mb@r
% \mb@t
% \mbox
% \medskip
% \message
% \minipage
% \mit
% \mkern
% \moveright
% \mskip
% \multicolumn
% \multiply
% \multiput
% \multispan
% \newbox
% \newcommand
% \newcount
% \newcounter
% \newdimen
% \newenvironment
% \newif
% \newinsert
% \newlabel
% \newlength
% \newline
% \newlinechar
% \newpage
% \newsavebox
% \newskip
% \newswitch
% \newtheorem
% \newtoks
% \newwrite
% \noalign
% \nobreak
% \nocite
% \noexpand
% \nofiles
% \noindent
% \nointerlineskip
% \nolinebreak
% \nonumber
% \nopagebreak
% \normalbaselineskip
% \normallineskip
% \normalmarginpar
% \normalsize
% \nullfont
% \number
% \numberline
% \obeycr
% \obeylines
% \obeyspaces
% \oddsidemargin
% \of
% \onecolumn
% \openin
% \or
% \outer
% \output
% \outputpenalty
% \oval
% \over
% \overfullrule
% \overline
% \p@
% \pagebreak
% \pagelayout
% \pagenumbering
% \pageref
% \pagestyle
% \par
% \paragraph
% \parbox
% \parfillskip
% \parindent
% \parsep
% \parshape
% \parskip
% \partopsep
% \partsw
% \penalty
% \picture
% \poptab
% \poptabs
% \postdisplaypenalty
% \prevdepth
% \protect
% \ps@empty
% \ps@plain
% \pushtab
% \pushtabs
% \put
% \quotation
% \raggedbottom
% \raggedleft
% \raggedright
% \raise
% \raisebox
% \rbrace
% \read
% \ref
% \refstepcounter
% \relax
% \renewcommand
% \renewenvironment
% \restorecr
% \reversemarginpar
% \right
% \rightmargin
% \rightmark
% \rightskip
% \rlap
% \rm
% \Roman
% \roman
% \romannumeral
% \root
% \rule
% \samepage
% \savebox
% \sbox
% \sc
% \scriptscriptsize
% \scriptsize
% \secdef
% \section
% \sectionmark
% \setbox
% \setcounter
% \setlength
% \settowidth
% \shipout
% \shortstack
% \showboxbreadth
% \showboxdepth
% \sixt@@n
% \skip
% \sl
% \sloppy
% \sloppypar
% \small
% \smallskip
% \space
% \spacefactor
% \splitmaxdepth
% \splittopskip
% \sqrt
% \ss
% \stackrel
% \stepcounter
% \stop
% \stretch
% \string
% \strut
% \subsection
% \subsubsection
% \tabalign
% \tabbing
% \tabbingsep
% \tabcolsep
% \tableentry
% \tableofcontents
% \tabskip
% \tabular
% \tencirc
% \tencircw
% \tenln
% \tenlnw
% \textfloatsep
% \textfraction
% \textheight
% \textwidth
% \thanks
% \the
% \thebibliography
% \theenumi
% \theenumii
% \theequation
% \thefigure
% \thefootnote
% \thempfn
% \thempfootnote
% \thepage
% \thesection
% \thicklines
% \thinlines
% \thinspace
% \thispagestyle
% \tiny
% \title
% \today
% \tolerance
% \topfigrule
% \topfraction
% \topmargin
% \topnewpage
% \topnum
% \topsep
% \topskip
% \tracingonline
% \tracingoutput
% \tracingstats
% \trivlist
% \tt
% \tw@
% \twocolumn
% \typein
% \typeout
% \unbox
% \underline
% \unhbox
% \unitlength
% \unskip
% \unvbox
% \usebox
% \usecounter
% \vadjust
% \value
% \vbox
% \vcenter
% \vector
% \verb
% \verbatim
% \vfil
% \vfuzz
% \vline
% \vrule
% \vsize
% \vskip
% \vspace
% \vsplit
% \vss
% \vtop
% \wd
% \write
% \writes
% \xdef
% \z@
% \[
% \\
% \]
% \^
% \_
% \`
% \{
% \|
% \}
% \~




%      ****************************************
%      *         GENERAL CONVENTIONS          *
%      ****************************************
%
% THE \LaTeX LOGO IS DEFINED HERE.
%
\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em
    T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}

% SAVED VERSIONS OF TeX PRIMITIVES:
%
%  The TeX primitive \foo is saved as \@@foo .  The following primitives
%  are handled in this way:

\let\@@par=\par
%\let\@@relax=\relax  % This was needed at one time, but seems to be obsolete.
\let\@@input=\input
\let\@@end=\end

% The following was added 19 April 1986:
% The \- command is redefined to allow it to work in the \tt type style,
% where automatic hyphenation is suppressed by setting \hyphenchar to -1.
% The original definition is saved as \@@hyph just in case anyone needs it.

\let\@@hyph=\-        % Original defin
\def\-{\discretionary{-}{}{}}

% SAVED VERSIONS OF TeX PARAMETERS
%  
%  \normalbaselineskip and \normallineskip hold the
%  normal values of \baselineskip and \lineskip 

% Any font-changing commands that change the normal value of \lineskip
% and \baselineskip should change their saved values.

% The following definitions save token space.  E.g., using \@height 
% instead of height saves 5 tokens at the cost in time of one macro 
% expansion.

\def\@height{height}
\def\@depth{depth}
\def\@width{width}

% The following implements the LaTeX \{ and \} commands.
% Changed 21 Apr 87 to make them robust.

\def\{{\protect\@lb}
\def\@lb{\relax\ifmmode\lbrace\else$\lbrace$\fi}
\def\}{\protect\@rb}
\def\@rb{\relax\ifmmode\rbrace\else$\rbrace$\fi}

 \message{counters,}
%      ****************************************
%      *          COUNTERS, ETC.              *
%      ****************************************
%
% THE FOLLOWING ARE FROM PLAIN:
% \z@         : A zero dimen or number.  It's more efficient to write 
%               \parindent\z@ than \parindent 0pt.
% \@ne        : The number 1.
% \m@ne       : The number -1.
% \tw@        : The number 2.
% \sixt@@n    : The number 16.
% \@m         : The number 1000.
% \@xxxii     : The number 32
% \@M         : The number 10000.
% \@Mi        : The number 10001.
% \@Mii       : The number 10002.
% \@Miii      : The number 10003.
% \@Miv       : The number 10004.
% \@MM        : The number 20000.
%
% \@flushglue : Glue used for \right- & \leftskip to = 0pt plus 1fil

\chardef\@xxxii=32
\mathchardef\@Mi=10001
\mathchardef\@Mii=10002
\mathchardef\@Miii=10003
\mathchardef\@Miv=10004

% Redefine PLAIN.TEX macros not to be \outer

\def\newcount{\alloc@0\count\countdef\insc@unt}
\def\newdimen{\alloc@1\dimen\dimendef\insc@unt}
\def\newskip{\alloc@2\skip\skipdef\insc@unt}
\def\newbox{\alloc@4\box\chardef\insc@unt}
\def\newwrite{\alloc@7\write\chardef\sixt@@n}

\newwrite\@unused
\newcount\@tempcnta
\newcount\@tempcntb
\newif\if@tempswa\@tempswatrue

\newdimen\@tempdima
\newdimen\@tempdimb

\newbox\@tempboxa

\newskip\@flushglue \@flushglue = 0pt plus 1fil
\newskip\@tempskipa
\newskip\@tempskipb
\newtoks\@temptokena

 \message{hacks,}
%      ****************************************
%      *            USEFUL HACKS              *
%      ****************************************
%
%  \@namedef{NAME}   : Expands to \def\NAME , except name can contain any
%                      characters.  
%  \@nameuse{NAME}   : Expands to \NAME .  
%
%  \@ifnextchar X{YES}{NO} 
%                    : Expands to YES if next character is an 'X',
%                      and to NO otherwise. (Uses temps a-c.)
%                      NOTE: GOBBLES ANY SPACE FOLLOWING IT.
%
%  \@ifstar{YES}{NO} : Gobbles following spaces and then tests if next the
%                      character is a '*'.  If it is, then it gobbles the 
%                      '*' and expands to YES, otherwise it expands to NO.
%
%  \@dblarg{CMD}{ARG}  : \@dblarg{CMD}{ARG} expands to CMD[ARG]{ARG}.  Use
%                        \@dblarg\CS when \CS takes arguments [ARG1]{ARG2}, 
%                        where default is ARG1 = ARG2.
%
%  \@ifundefined{NAME}{YES}{NO}
%                    : If \NAME is undefined then it executes YES,
%                      otherwise it executes NO.  More precisely,
%                      true if \NAME either undefined or = \relax.
%  \@ifdefinable \NAME {YES}
%                    : Executes YES if the user is allowed to define \NAME,
%                      otherwise it gives an error.  The user can define \NAME
%                      if \@ifundefined{NAME} is true, 'NAME' /= 'relax'
%                      and the first three letters of 'NAME' are not
%                      'end'.
%  \newcommand{\FOO}[i]{TEXT}
%                    : User command to define \FOO to be a macro with
%                      i arguments (i = 0 if missing) having the definition
%                      TEXT.  Produces an error if \FOO already defined.
%
%  \renewcommand{\FOO}[i]{TEXT} : Same as \newcommand, except it 
%                      checks if \FOO already defined.
%
%  \newenvironment{FOO}[i]{DEF1}{DEF2}
%         equivalent to 
%         \newcommand{\FOO}[i]{DEF1} \def{\endFOO}{DEF2}
%
%  \renewenvironment : obvious companion to \newenvironment
%
%  \@cons : See description of \output routine.
%
%  \@car T1 T2 ... Tn\@nil == T1  (unexpanded)
%
%  \@cdr T1 T2 ... Tn\@nil == T2 ... Tn     (unexpanded)
% 
%  \typeout{message} : produces a warning message on the terminal
%
%  \@warning{message}: prints 'LaTeX Warning: message.'
%
%  \typein{message}  : Types message, asks the user to type in a command, then 
%                      executes it
%
%  \typein[\CS]{MSG} : Same as above, except defines \CS to be the input
%                      instead of executing it.

\def\typein{\let\@typein\relax\@ifnextchar[{\@xtypein}{\@xtypein[\@typein]}}
\def\@xtypein[#1]#2{\typeout{#2}\read0 to#1\ifx #1\@defpar \def#1{}\else
   \@iden{\expandafter\@strip\expandafter
   #1#1\@gobble\@gobble} \@gobble\fi\@typein}
\def\@strip#1#2 \@gobble{\def #1{#2}}
\def\@defpar{\par}
\def\@iden#1{#1}

\def\typeout#1{{\let\protect\string\immediate\write\@unused{#1}}}
\def\@warning#1{\typeout{LaTeX Warning: #1.}}
\def\@namedef#1{\expandafter\def\csname #1\endcsname}
\def\@nameuse#1{\csname #1\endcsname}

\def\@cons#1#2{\begingroup\let\@elt\relax\xdef#1{#1\@elt #2}\endgroup}

\def\@car#1#2\@nil{#1}
\def\@cdr#1#2\@nil{#2}

% \@carcube T1 ... Tn\@nil = T1 T2 T3 , n > 3
\def\@carcube#1#2#3#4\@nil{#1#2#3}

\def\newcommand#1{\@ifnextchar [{\@argdef#1}{\@argdef#1[0]}}

\def\renewcommand#1{\edef\@tempa{\expandafter\@cdr\string 
  #1\@nil}\@ifundefined{\@tempa}{\@latexerr{\string#1\space undefined}\@ehc
    }{}\@ifnextchar [{\@reargdef#1}{\@reargdef#1[0]}}

\def\newenvironment#1{\@ifnextchar
     [{\@newenv{#1}}{\@newenv{#1}[0]}}

\long\def\@newenv#1[#2]#3{\expandafter\newcommand 
     \csname #1\endcsname[#2]{#3}\expandafter\long
     \expandafter\def\csname end#1\endcsname}

\def\renewenvironment#1{\@ifnextchar
     [{\@renewenv{#1}}{\@renewenv{#1}[0]}}

\long\def\@renewenv#1[#2]#3{\expandafter\renewcommand 
     \csname #1\endcsname[#2]{#3}\expandafter\long
     \expandafter\def\csname end#1\endcsname}

\long\def\@argdef#1[#2]#3{\@ifdefinable #1{\@reargdef#1[#2]{#3}}}

% Absolutely untypable control sequence \@?@?  substituted for \@tempb in
% definition of \@reargdef because it (and therefore \newcommand and
% \renewcommand) leaves the control sequence dangerously \let to #.
% (Change made 23 November 87.)
%
\catcode`\?=11\relax
\long\def\@reargdef#1[#2]#3{\@tempcnta#2\relax\let#1\relax
\edef\@tempa{\long\def#1}\@tempcntb \@ne
\let\@?@?\relax\@whilenum\@tempcnta>0
\do{\edef\@tempa{\@tempa\@?@?\the\@tempcntb}\advance\@tempcntb \@ne \advance
\@tempcnta \m@ne}\let\@?@?##\@tempa{#3}}
\catcode`\?=12\relax

\long\def\@ifdefinable #1#2{\edef\@tempa{\expandafter\@cdr\string #1\@nil}
\@ifundefined{\@tempa}{\edef\@tempb{\expandafter\@carcube \@tempa xxxx\@nil}%
\ifx \@tempb\@qend \@notdefinable\else  
\ifx \@tempa\@qrelax \@notdefinable\else  #2\fi\fi}{\@notdefinable}}

\long\def\@ifundefined#1#2#3{\expandafter\ifx\csname 
  #1\endcsname\relax#2\else#3\fi}


% The following define \@qend and \@qrelax to be the strings 'end' and
% 'relax' with the characters \catcoded 12.

\edef\@qend{\expandafter\@cdr\string\end\@nil}
\edef\@qrelax{\expandafter\@cdr\string\relax\@nil}

% \@ifnextchar X{YES}{NO} 
%  BEGIN
%    \@tempe := X  % uses \let
%    \@tempa := YES
%    \@tempb := NO
%    \futurelet\@tempc
%    \@ifnch
%  END
%
% \@ifnch ==
%   BEGIN
%     if  \@tempc = blank space
%       then  \@tempd := def(\@xifnch)
%       else  if  \@tempc = \@tempe
%                then  \@tempd := def(\@tempa)
%                else  \@tempd := def(\@tempb)
%             fi
%     fi
%     \@tempd
%   END
%
% \@xifnch ==
%  BEGIN
%    gobble blanks
%    \futurelet\@tempc
%    \@ifnch
%  END
%
\def\@ifnextchar#1#2#3{\let\@tempe #1\def\@tempa{#2}\def\@tempb{#3}\futurelet
    \@tempc\@ifnch}
\def\@ifnch{\ifx \@tempc \@sptoken \let\@tempd\@xifnch
      \else \ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi
      \fi \@tempd}

% NOTE: the following hacking must precede the definition of \:
%  as math medium space.

\def\:{\let\@sptoken= } \:  % this makes \@sptoken a space token 

\def\:{\@xifnch} \expandafter\def\: {\futurelet\@tempc\@ifnch}

\def\@ifstar#1#2{\@ifnextchar *{\def\@tempa*{#1}\@tempa}{#2}}

\long\def\@dblarg#1{\@ifnextchar[{#1}{\@xdblarg{#1}}}
\long\def\@xdblarg#1#2{#1[{#2}]{#2}}

% The command \@sanitize changes the catcode of all special characters
% except for braces to 'other'.  It can be used for commands like
% \index that want to write their arguments verbatim.  Needless to
% say, this command should only be executed within a group, or chaos
% will ensue.

\def\@sanitize{\@makeother\ \@makeother\\\@makeother\$\@makeother\&%
\@makeother\#\@makeother\^\@makeother\^^K\@makeother\_\@makeother\^^A%
\@makeother\%\@makeother\~}


 \message{errors,}
%      ****************************************
%      *           ERROR HANDLING             *
%      ****************************************
%
%  \@latexerr{MSG}{HLP}: Types a LaTeX error message MSG and gives an error
%                          halt with error help message HLP.
%
\newlinechar`\^^J  

% 19 Jun 86, took out the grouping. re: John Hobby
\def\@latexerr#1#2{%
\edef\@tempc{#2}\expandafter\errhelp\expandafter{\@tempc}%
\typeout{LaTeX error. \space See LaTeX manual for explanation.^^J
 \space\@spaces\@spaces\@spaces Type \space H <return> \space for 
 immediate help.}\errmessage{#1}}

\def\@spaces{\space\space\space\space}

%% error help message pieces.
\def\@eha{Your command was ignored.
^^JType \space I <command> <return> \space to replace it
  with another command,^^Jor \space <return> \space to continue without it.}
\def\@ehb{You've lost some text. \space \@ehc}
\def\@ehc{Try typing \space <return> 
  \space to proceed.^^JIf that doesn't work, type \space X <return> \space to 
  quit.}
\def\@ehd{You're in trouble here.  \space\@ehc}

% Here are all the error message-generating commands of LaTeX.
%
% \@notdefinable : Error message generated in \@ifdefinable from calls
%                  by \newcommand, \newlength, \newtheorem specifying an
%                  already-defined command name.
%
% \@nolnerr      : Generated by \newline and \\ when called in vertical mode.
%                  
% '\... undefined' : Generated in \renewcommand.
%
% \@nocnterr     : Generated by \setcounter, \addtocounter or \newcounter
%                  for undefined counter.
%
% \@ctrerr       : Called when trying to print the value of a counter 
%                  numbered by letters that's greater than 26.
%
% 'Environment --- undefined' : Issued by \begin for undefined environment.
%
% \@badend       : Called by \end that doesn't match its \begin.
%
% \@badmath      : Called by \[, \], \( or \) when used in wrong mode.
%
% \@toodeep      : Called by a list environment nested more than six levels
%                  deep, or an enumerate or itemize nested more than four
%                  levels.
%
% \@badpoptabs   : Called by \endtabbing when not enough \poptabs have
%                  occurred, or by \poptabs when too many have occurred.
%
% \@badtab : Called by \>, \+ , \- or \< when stepping to an undefined tab.
%
% 'tab overflow' : Occurs in \= when maximum number of tabs exceeded.
%
% '\< in mid line' : Occurs in \< when it appears in middle of line.
%
% \@preamerr : Occurs in array or tabular environment, or in \multicolumn
%              command, when error in argument detected.
%
% \@badlinearg : Occurs in \line and \vector command when a bad slope 
%                argument is encountered.
%
% \@parmoderr  : Occurs in a float environment or a \marginpar when
%                encountered in inner vertical mode.
%
% \@fltovf     : Occurs in float environment or \marginpar when there
%                are no more free boxes for storing floats.
%
% \@latexbug   :  Occurs in output routine.  This is bad news.
%
% 'Float(s) lost' : In output routine, caused by a float environment or
%                   \marginpar occurring in inner vertical mode.
%
% \@nofonterror   : Typeface not available.  %%% OBSOLETE; DELETED.
%
% \@badcrerr      : A \\ used where it shouldn't be in a centering or flushing
%                   environment.
%
% \@noitemerr     : \addvspace or \addpenalty was called when not in vmode.  
%                   Probably caused by a missing \item.
%
% \@notprerr      : A command that can be used only in the preamble
%                   appears after the \begin{document} command.

\def\@notdefinable{\@latexerr{Command name '\@tempa' already used}\@eha}

\def\@nolnerr{\@latexerr{There's no line here to end}\@eha}

\def\@nocnterr{\@latexerr{No such counter}\@eha}

\def\@ctrerr{\@latexerr{Counter too large}\@ehb}

\def\@nodocument{\@latexerr{Missing \string\begin{document}}\@ehd}

\def\@badend#1{\@latexerr{\string\begin{\@currenvir} ended by
      \string\end{#1}}\@eha}

\def\@badmath{\@latexerr{Bad math environment delimiter}\@eha}

\def\@toodeep{\@latexerr{Too deeply nested}\@ehd}

\def\@badpoptabs{\@latexerr{\string\pushtabs \space and \string\poptabs
    \space don't match}\@ehd}

\def\@badtab{\@latexerr{Undefined tab position}\@ehd}

\def\@preamerr#1{\@latexerr{\ifcase #1 Illegal character\or
     Missing @-exp\or Missing p-arg\fi\space
     in array arg}\@ehd}

\def\@badlinearg{\@latexerr{Bad \string\line\space or \string\vector
   \space argument}\@ehb}

\def\@parmoderr{\@latexerr{Not in outer par mode}\@ehb}

\def\@fltovf{\@latexerr{Too many unprocessed floats}\@ehb}

\def\@latexbug{\@latexerr{This may be a LaTeX bug}{Call for help}}

% \def\@nofonterror{\@latexerr{Typeface not available}\@eha}

\def\@badcrerr {\@latexerr{Bad use of \string\\}\@ehc}

\def\@noitemerr{\@latexerr{Something's wrong--perhaps a missing 
\string\item}\@ehc}

\def\@notprerr {\@latexerr{Can be used only in preamble}\@eha}

 \message{par,}
%       ****************************************
%       *          \par AND \everypar          *
%       ****************************************
%
% There are two situations in which \par may be changed:
%
%   - Long-term changes, in which the new value is to remain in effect
%     until the current environment is left.  The environments that
%     change \par in this way are the following:
%
%         * All list environments (itemize, quote, etc.)
%         * Environments that turn \par into a noop:
%              tabbing, array and tabular.
%
%   - Temporary changes, in which \par is restored to its previous value the 
%     next time it is executed. The following are all such uses.
%         * \end [when preceded by \@endparenv, which is called by
%                 \endtrivlist]
%         * The mechanism for avoiding page breaks and getting the
%           spacing right after section heads.
%
% To permit the proper interaction of these two situations, long-term
% changes are made by the following command:
%     \@setpar{VAL}      : To set \par. It \def's \par and \@par to VAL.
% Short-term changes are made by the usual \def\par commands.  
% The original values are restored after a short-term change
% by the \@restorepar commands.
% 
% NOTE: \@@par always is defined to be the original TeX \par.
%
% \everypar is changed only for the short term.  Whenever \everypar
% is set non-null, it should restore itself to null when executed.
% The following commands change \everypar in this way:
%         * \item
%         * \end [when preceded by \@endparenv, which is called by
%                 \endtrivlist]
%         * \minipage
%
% WARNING: Commands that make short-term changes to \par and \everypar
% must take account of the possibility that the new commands and the
% ones that do the restoration may be executed inside a group.  In
% particular, \everypar is executed inside a group whenever a new paragraph
% begins with a left brace.  The \everypar command that restores its
% definition should be local to the current group (in case the command
% is inside a minipage used inside someplace where \everypar has been 
% redefined).  Thus, if \everypar is redefined to do an \everypar{}
% it could take several executions of \everypar before
% the restoration 'holds'.  This usually causes no problem.  However, to
% prevent the extra executions from doing harm, use a global switch
% to keep anything harmful in the new \everypar from being done twice.
%
% WARNING: Commands that change \everypar should remember that \everypar
% might be supposed to set the following switches false:
%              @nobreak 
%              @minipage
% they should do the setting if necessary.

\def\@par{\let\par=\@@par\par}

\def\@setpar#1{\def\par{#1}\def\@par{#1}}
\def\@restorepar{\def\par{\@par}}

 \message{spacing,}
%      **********************************************
%      *     SPACING / LINE AND PAGE BREAKING       *
%      **********************************************
%
% USER COMMANDS:
% \nopagebreak[i] : i = 0,...,4.  Default argument = 4.  Puts a penalty
%                 into the vertical list output as follows:
%                   0 : penalty = 0
%                   1 : penalty = \@lowpenalty
%                   2 : penalty = \@medpenalty
%                   3 : penalty = \@highpenalty
%                   4 : penalty = 10000
% \pagebreak[i]   : same as \nopagebreak except negatives of its penalty
% \linebreak[i], \nolinebreak[i] : analogs of the above
% \samepage : inhibits page breaking most places by setting the following
%             penalties to 10000
%                    \interlinepenalty
%                    \postdisplaypenalty
%                    \interdisplaylinepenalty
%                    \@beginparpenalty
%                    \@endparpenalty
%                    \@itempenalty
%                    \@secpenalty
%                    \interfootnotelinepenalty
%
% \obeycr    : defines <CR> == \\.
% \restorecr : restores <CR> to its usual meaning.
%
% \\         : initially defined to be \newline
% \\[LENGTH] : initially defined to be \vspace{LENGTH}\newline
%              Note: \\* adds a \vadjust{\penalty 10000}

\def\nopagebreak{\@ifnextchar[{\@nopgbk}{\@nopgbk[4]}}
\def\@nopgbk[#1]{\ifvmode \penalty \@getpen{#1}\else
\@bsphack\vadjust{\penalty \@getpen{#1}}\@esphack\fi} 

\def\pagebreak{\@ifnextchar[{\@pgbk}{\@pgbk[4]}}
\def\@pgbk[#1]{\ifvmode \penalty -\@getpen{#1}\else
\@bsphack\vadjust{\penalty -\@getpen{#1}}\@esphack\fi}

\def\nolinebreak{\@ifnextchar[{\@nolnbk}{\@nolnbk[4]}}
\def\@nolnbk[#1]{\ifvmode \@nolnerr\else \@tempskipa\lastskip
     \unskip \penalty \@getpen{#1}\ifdim \@tempskipa >\z@
     \hskip\@tempskipa\ignorespaces\fi\fi}

\def\linebreak{\@ifnextchar[{\@lnbk}{\@lnbk[4]}}
\def\@lnbk[#1]{\ifvmode \@nolnerr\else 
     \unskip\penalty -\@getpen{#1}\fi}

\def\samepage{\interlinepenalty\@M
   \postdisplaypenalty\@M
   \interdisplaylinepenalty\@M
   \@beginparpenalty\@M
   \@endparpenalty\@M
   \@itempenalty\@M
   \@secpenalty\@M
   \interfootnotelinepenalty\@M}

% \nobreak added to \newline to prevent null lines when \newline
% ends an overfull line.  Change made 24 May 89 as suggested by
% Frank Mittelbach and Rainer Sch\"opf
%
\def\newline{\ifvmode \@nolnerr \else \unskip\nobreak\hfil 
  \penalty -\@M\relax\fi}


\def\@normalcr{\@ifstar{\vadjust{\penalty\@M}\@xnewline}{\@xnewline}}

\def\@xnewline{\@ifnextchar[{\@newline}{\newline}}

\def\@newline[#1]{\ifhmode\unskip\fi\vspace{#1}\newline}

\let\\=\@normalcr

\def\@getpen#1{\ifcase #1 0 \or \@lowpenalty\or
         \@medpenalty \or \@highpenalty
         \else \@M \fi}

% @nobreak : Switch used to avoid page breaks caused by \label after a section 
%            heading, etc. It should be GLOBALLY set true after the \nobreak 
%            and GLOBALLY set false by the next invocation of \everypar.
%            Commands that reset \everypar should globally set it false
%            if appropriate.
%
\newif\if@nobreak \@nobreakfalse 

% \@bsphack ... \@esphack
%     used by macros such as \index and \begin{@float} ... \end{@float}
%     that want to be invisible -- i.e.,
%     not leave any extra space when used in the middle of text.  Such
%     a macro should begin with \@bsphack and end with \@esphack
%     The macro in question should not create any text, nor change the
%     mode.
%
% \@bsphack ==
%  BEGIN
%    \dimen\@savsk := \lastskip
%    if  hmode  then  \@savsf := \spacefactor  fi
%  END
%
% \@esphack ==
%  BEGIN
%    if  hmode
%      then  \spacefactor := \@savsf
%            if \dimen\@savsk > 0pt  then  \ignorespaces  
%                                          \global\@ignoretrue   fi
%    fi
%  END
%

\newdimen\@savsk
\newcount\@savsf

\def\@bsphack{\@savsk\lastskip 
    \ifhmode\@savsf\spacefactor\fi}

\def\@esphack{\relax\ifhmode\spacefactor\@savsf
     {}\ifdim \@savsk >\z@ \global\@ignoretrue \ignorespaces 
  \fi \fi}

% VERTICAL SPACING:
%
% LaTeX supports the PLAIN TeX commands \smallskip, \medskip and \bigskip.
% However, it redefines them using \vspace instead of \vskip.
%
% Extra vertical space is added by the command command \addvspace{SKIP},
% which adds a vertical skip of SKIP to the document.  The sequence
%         \addvspace{S1} \addvspace{S2} 
% is equivalent to 
%         \addvspace{maximum of S1, S2}.   
% \addvspace should be used only in vertical mode, and gives an error if it's 
% not.  The \addvspace command does NOT add vertical space if
% @minipage = T. The minipage environment uses this to inhibit
% the addition of extra vertical space at the beginning.
%
% Penalties are put into the vertical list with the \addpenalty{PENALTY}
% command.  It works properly when \addpenalty and \addvspace commands
% are mixed.
%
% The @nobreak switch is set true used when in vertical mode and no page
% break should occur.  (Right now, it is used only by the section heading 
% commands to inhibit page breaking after a heading.)
% 
%
% \addvspace{SKIP} ==
%  BEGIN
%   if vmode
%     then if @minipage 
%            else if \lastskip =0 
%                    then  \vskip SKIP
%                    else  if \lastskip < SKIP
%                             then  \vskip -\lastskip
%                                   \vskip SKIP
%                             else if SKIP < 0 and \lastskip >= 0
%                                    then \vskip -\lastskip
%                                         \vskip \lastskip + SKIP
%          fi      fi       fi      fi
%     else 'missing \item' error.
%   fi
%  END

\def\addvspace#1{\ifvmode
     \if@minipage\else
          \ifdim \lastskip =\z@ \vskip #1\relax
             \else \@tempskipb#1\relax\@xaddvskip
     \fi\fi
  \else\@noitemerr\fi}

\def\@xaddvskip{\ifdim \lastskip <\@tempskipb\vskip-\lastskip\vskip 
             \@tempskipb\relax
        \else  \ifdim \@tempskipb<\z@ 
                 \ifdim \lastskip <\z@
                    \else \advance\@tempskipb\lastskip
                           \vskip -\lastskip \vskip \@tempskipb
      \fi\fi\fi}

\def\addpenalty#1{\ifvmode 
   \if@minipage\else\if@nobreak\else
      \ifdim\lastskip=\z@ \penalty#1\relax
         \else \@tempskipb\lastskip
               \vskip -\lastskip \penalty#1\vskip\@tempskipb
      \fi\fi\fi
   \else\@noitemerr\fi}

\def\vspace{\@ifstar{\@vspacer}{\@vspace}}
\def\@vspace#1{\ifvmode 
    \dimen@\prevdepth \expandafter\vskip #1\vskip \z@\prevdepth\dimen@
       \else 
        \@bsphack\vadjust{\dimen@\prevdepth 
            \expandafter\vskip #1\vskip \z@\prevdepth\dimen@}\@esphack\fi}
\def\@vspacer#1{\ifvmode \dimen@\prevdepth 
         \hrule height\z@ \nobreak \expandafter\vskip #1\vskip \z@
           \prevdepth\dimen@
        \else
         \@bsphack\vadjust{\dimen@\prevdepth \hrule height\z@ \nobreak 
            \expandafter\vskip #1\vskip \z@ \prevdepth\dimen@}\@esphack\fi}

\def\smallskip{\vspace\smallskipamount}
\def\medskip{\vspace\medskipamount}
\def\bigskip{\vspace\bigskipamount}


% See list environment for explanation of the following macros.

\def\endtrivlist{\if@newlist\@noitemerr\fi 
   \if@inlabel\indent\fi 
   \ifhmode\unskip \par\fi 
   \if@noparlist \else
      \ifdim\lastskip >\z@ \@tempskipa\lastskip \vskip -\lastskip
         \advance\@tempskipa\parskip \advance\@tempskipa -\@outerparskip 
         \vskip\@tempskipa
   \fi\@endparenv\fi}

% CHANGES TO \@endparenv:
% Changed  \hskip -\parindent  to  \setbox0=\lastbox  so a \noindent
% becomes a no-op when used before a line immediately following a
% list environment.  (Changed 23 Oct 86)
%
% To suppress the paragraph indentation in text immediately following
% a paragraph-making environment, \everypar is changed to remove the
% space, and \par is redefined to restore \everypar.  Instead of redefining 
% \par and \everpar, \@endparenv was changed to set the @endpe switch,
% letting \end redefine \par and \everypar.  This allows paragraph-
% making environments work right when called by other environments.
% (Changed 27 Oct 86)

\def\@endparenv{\addpenalty\@endparpenalty\addvspace\@topsepadd\@endpetrue}

\def\@doendpe{\@endpetrue
     \def\par{\@restorepar\everypar{}\par\@endpefalse}\everypar
               {\setbox0=\lastbox\everypar{}\@endpefalse}}

\newif\if@endpe
\@endpefalse

% HORIZONTAL SPACE
%
% \, : used in paragraph mode produces a \thinspace.  It has the ordinary
%      definition in math mode.  Useful for quotes inside quotes, as in
%      ``\,`Foo', he said.''
%
% \@ : placed before a '.', makes it a sentence-ending period.  Does the
%     right thing for other punctuation marks as well.  Does this by
%     setting spacefactor to 1000.  

\def\,{\protect\pcomma}
\def\pcomma{\relax\ifmmode\mskip\thinmuskip\else\thinspace\fi}


\def\@{\spacefactor\@m}

\def\hspace{\protect\phspace}
\def\phspace{\@ifstar{\@hspacer}{\@hspace}}
\def\@hspace#1{\leavevmode\expandafter\hskip #1\relax}

\def\@hspacer#1{\leavevmode\vrule width\z@\nobreak\expandafter\hskip 
                #1\hskip \z@\relax}  
                      %% extra \hskip 0pt added 12/17/85 to guard
                      %% against a following \unskip
                      %% \relax added 13 Oct 88 for usual TeX lossage

% define \fill to = 0pt plus 1fill
\newskip\fill \fill = 0pt plus 1fill

% \stretch{N} == 0pt plus N fill
\def\stretch#1{\z@ plus #1fill\relax}

{\catcode`\^^M=13 \gdef\obeycr{\catcode`\^^M=13 \def^^M{\\}\@gobblecr}%
\gdef\restorecr{\catcode`\^^M=5 }} %} BRACE MATCHING


 \message{control,}
%      **********************************************
%      *     PROGRAM CONTROL STRUCTURE MACROS       *
%      **********************************************
% 
% \@whilenum TEST \do {BODY}  
% \@whiledim TEST \do {BODY}  : These implement the loop
%           while  TEST  do  BODY  od  
%     where  TEST  is a TeX \ifnum or \ifdim test, respectively.
%     They are optimized for the normal case of TEST initially false.
% 
% \@whilesw SWITCH \fi {BODY} : Implements the loop
%               while SWITCH do BODY od
%     where SWITCH is a command defined by \newswitch.
%     Optimized for normal case of SWITCH initially false.
%
% \@for NAME := LIST \do {BODY} : Assumes that LIST expands to A1,A2, ... ,An .
%      Executes  BODY  n  times, with  NAME = Ai  on the i-th iteration.
%      Optimized for the normal case of n = 1.  Works for n=0.
%
% \@tfor NAME := LIST \do {BODY}
%      if, before expansion, LIST = T1 ... Tn  where each Ti is a 
%      token or {...}, then executes  BODY  n  times, with  NAME = Ti  
%      on the i-th iteration.  Works for n=0.
%      
%  NOTES: 1. These macros use no \@temp sequences.
%         2. These macros do not work if the body contains anything that looks
%            syntactically to TeX like an improperly balanced \if \else \fi.
%
% \@whilenum TEST \do {BODY} ==
%  BEGIN
%    if  TEST  
%      then  BODY
%            \@iwhilenum{TEST \relax BODY}
%  END
%
% \@iwhilenum {TEST BODY} ==
%  BEGIN
%    if  TEST
%      then  BODY
%            \@nextwhile = def(\@iwhilenum)
%      else  \@nextwhile = def(\@whilenoop)
%    fi
%    \@nextwhile {TEST BODY}
%  END
%
% \@whilesw SWITCH \fi {BODY} ==
%  BEGIN
%    if SWITCH
%      then BODY
%           \@iwhilesw {SWITCH BODY}\fi
%    fi
%  END
%
% \@iwhilesw {SWITCH BODY} \fi ==
%  BEGIN
%    if SWITCH
%      then BODY
%           \@nextwhile = def(\@iwhilesw)
%      else \@nextwhile = def(\@whileswnoop)
%    fi
%    \@nextwhile {SWITCH BODY} \fi
%  END

\def\@whilenoop#1{}
\def\@whilenum#1\do #2{\ifnum #1\relax #2\relax\@iwhilenum{#1\relax 
     #2\relax}\fi}
\def\@iwhilenum#1{\ifnum #1\let\@nextwhile=\@iwhilenum 
         \else\let\@nextwhile=\@whilenoop\fi\@nextwhile{#1}}

\def\@whiledim#1\do #2{\ifdim #1\relax#2\@iwhiledim{#1\relax#2}\fi}
\def\@iwhiledim#1{\ifdim #1\let\@nextwhile=\@iwhiledim 
        \else\let\@nextwhile=\@whilenoop\fi\@nextwhile{#1}}

\def\@whileswnoop#1\fi{}
\def\@whilesw#1\fi#2{#1#2\@iwhilesw{#1#2}\fi\fi}
\def\@iwhilesw#1\fi{#1\let\@nextwhile=\@iwhilesw 
         \else\let\@nextwhile=\@whileswnoop\fi\@nextwhile{#1}\fi}

% \@for NAME := LIST \do {BODY} ==
%    BEGIN \@forloop expand(LIST),\@nil,\@nil \@@ NAME {BODY} END
%
% \@forloop CAR, CARCDR, CDRCDR \@@ NAME {BODY} ==
%   BEGIN
%     NAME = CAR
%     if def(NAME) = def(\@nnil)
%       else BODY;
%            NAME = CARCDR
%            if def(NAME) = def(\@nnil)
%              else BODY
%                   \@iforloop CDRCDR \@@ NAME \do {BODY}
%            fi              
%     fi
%   END
%
% \@iforloop CAR, CDR \@@ NAME {BODY} =
%     NAME = CAR
%     if def(NAME) = def(\@nnil)
%        then  \@nextwhile = def(\@fornoop)
%        else  BODY ;
%              \@nextwhile = def(\@iforloop)
%     fi
%     \@nextwhile name cdr {body}
%
% \@tfor NAME := LIST \do {BODY}
%    =  \@tforloop LIST \@nil \@@ NAME {BODY}
%
% \@tforloop car cdr \@@ name {body} =
%     name = car
%     if def(name) = def(\@nnil)
%        then  \@nextwhile == \@fornoop
%        else  body ;
%              \@nextwhile == \@forloop
%     fi
%     \@nextwhile name cdr {body}
%

\def\@nnil{\@nil}
\def\@empty{}
\def\@fornoop#1\@@#2#3{}

\def\@for#1:=#2\do#3{\edef\@fortmp{#2}\ifx\@fortmp\@empty \else
    \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}\fi}

\def\@forloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else
       #5\def#4{#2}\ifx #4\@nnil \else#5\@iforloop #3\@@#4{#5}\fi\fi}

\def\@iforloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil 
       \let\@nextwhile=\@fornoop \else
      #4\relax\let\@nextwhile=\@iforloop\fi\@nextwhile#2\@@#3{#4}}

\def\@tfor#1:=#2\do#3{\xdef\@fortmp{#2}\ifx\@fortmp\@empty \else
    \@tforloop#2\@nil\@nil\@@#1{#3}\fi}
\def\@tforloop#1#2\@@#3#4{\def#3{#1}\ifx #3\@nnil 
       \let\@nextwhile=\@fornoop \else
      #4\relax\let\@nextwhile=\@tforloop\fi\@nextwhile#2\@@#3{#4}}


 \message{files,}
%     ****************************************
%     *           FILE HANDLING              *
%     ****************************************
%
% THE FOLLOWING USER COMMANDS ARE DEFINED IN THIS PART:
%  \document            : Reads in the .AUX files and \catcode's @ to 12.
%  \nofiles             : Suppresses all file output by setting \@filesw false.
%  \includeonly{NAME1, ... ,NAMEn}
%                    : Causes only parts NAME1, ... ,NAMEn to be read by
%                      their \include commands.  Works by setting \@partsw true
%                      and setting \@partlist to NAME1, ... ,NAMEn.
%  \include{NAME}    : Does an \input NAME unless \partsw is true and
%                      NAME is not in \@partlist.  If \@filesw is true, then
%                      it directs .AUX output to NAME.AUX, including a 
%                      checkpoint at the end.
% \input{NAME}       : The same as TeX's \input, except it allows optional
%                      braces around the file name.
%
%  VARIABLES, SWITCHES AND INTERNAL COMMANDS:
%    \@mainaux    : Output file number for main .AUX file.
%    \@partaux    : Output file number for current part's .AUX file.
%    \@auxout     : Either \@mainout or \@partout, depending on which .AUX
%                   file output goes to.
%    \@input{foo} : If file foo exists, then \input's it, otherwise types 
%                   a warning message.
%    @filesw       : Switch -- set false if no .AUX, .TOC, .IDX etc files are 
%                   to be 
%    @partsw      : Set true by a \includeonly command.
%    \@partlist   : Set to the argument of the \includeonly command.
%    
%    \cp@FOO      : The checkpoint for \include'd file FOO.TEX, written
%                   by \@writeckpt at the end of file FOO.AUX
% 
% \document ==
%   BEGIN
%     \endgroup   % cancels \begingroup generated by \begin command
%     \@colht := \@colroom := \vsize := \textheight
%     \columnwidth := \textwidth
%     \@clubpenalty := \clubpenalty          % \@clubpenalty saves value.
%     IF @twocolumn = T 
%       THEN \columnwidth := (\columnwidth - \columnsep)/2
%            @firstcolumn := T
%     FI
%     \hsize  := \linewidth := \columnwidth
%     \begingroup
%        \@floatplacement \@dblfloatplacement
%        \@input{\jobname.aux}
%     \endgroup
%     IF \@filesw = T
%       THEN  open file \@mainaux for writing
%             write ``\relax''on file \@mainaux
%     FI
%     \do{COMMAND} == BEGIN \let COMMAND = \@notprerr END
%     \@preamblecmds
%     \do == \noexpand
%     \@normalsize
%     \everypar{}
%   END
%
% \includeonly{FILELIST} ==
%  BEGIN
%   \@partsw   := T
%   \@partlist := FILELIST
%  END
%
% \include{FILE} ==
%  BEGIN
%   \clearpage
%   if \@filesw = T
%     then  \immediate\write\@mainaux{\string\@input{FILE.AUX}}
%   fi
%   if  \@partsw = T
%     then \@tempswa := F
%          \@tempb == FILE
%          for \@tempa := \@partlist
%              do if eval(\@tempa) = eval(\@tempb)
%                   then \@tempswa := T          fi
%              od
%   fi
%
%   if \@tempswa = T        
%      then \@auxout := \@partaux
%           if \@filesw = T
%             then  \immediate\openout\@partaux{FILE.AUX}
%                   \immediate\write\@partaux{\relax}
%           fi
%           \@input{FILE.TEX}
%           \clearpage
%           \@writeckpt{FILE}
%           if @filesw then \closeout \@partaux fi

%           \@auxout := \@mainaux
%      else \cp@FILE
%   fi
%  END
%  
% \@writeckpt{FILE} ==
%  BEGIN
%    if \@filesw = T
%        \immediate\write on file \@partaux:
%                  \gdef\cp@FILE{                  %% } 
%        for \@tempa := \cl@@ckpt
%           do  \immediate\write on file \@partaux:
%                   \global\string\setcounter
%                       {eval(\@tempa)}{eval(\c@eval(\@tempa))}
%           od                                     %% {
%        \immediate\write on file \@partaux:  }
%    fi
%  END
%
%  INITIALIZATION
%    \@tempswa := T

\newif\if@filesw \@fileswtrue
\newif\if@partsw \@partswfalse
\newwrite\@mainaux 
\newwrite\@partaux 

\newcount\@clubpenalty

\def\document{\endgroup
  \@colht\textheight  \@colroom\textheight \vsize\textheight
   \columnwidth\textwidth \@clubpenalty\clubpenalty
   \if@twocolumn \advance\columnwidth -\columnsep 
      \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue 
   \fi
  \hsize\columnwidth \linewidth\hsize
  \begingroup\@floatplacement\@dblfloatplacement
   \makeatletter\let\@writefile\@gobbletwo
   \@input{\jobname.aux}\endgroup 
  \if@filesw \immediate\openout\@mainaux=\jobname.aux
    \immediate\write\@mainaux{\relax}\fi
  \def\do##1{\let ##1\@notprerr}%
  \@preamblecmds
  \let\do\noexpand  
  \@normalsize\everypar{}}

\def\@gobbletwo#1#2{}

\def\nofiles{\@fileswfalse \typeout
   {No auxiliary output files.}\typeout{}}

\def\@input#1{\openin1 #1 \ifeof1 \typeout
  {No file #1.}\else\closein1 \relax\@@input #1 \fi}
\let\@auxout=\@mainaux 

\def\includeonly#1{\@partswtrue\edef\@partlist{#1}}

% In the definition of \include, \def\@tempb changed to \edef\@tempb to
% be consistent with the \edef in \includeonly.  (Suggested by Rainer
% Sch\"opf & Frank Mittelbach.  Change made 20 Jul 88.)
%
% Changed definition of \include to allow space at end of file name--
% otherwise, typing \include{foo } would cause LaTeX to overwrite
% foo.tex.  Change made 24 May 89, suggested by Rainer Sch\"opf  and 
% Frank Mittelbach

\def\include#1{\@include#1 }
\def\@include#1 {\clearpage
\if@filesw \immediate\write\@mainaux{\string\@input{#1.aux}}\fi
\@tempswatrue\if@partsw \@tempswafalse\edef\@tempb{#1}\@for
\@tempa:=\@partlist\do{\ifx\@tempa\@tempb\@tempswatrue\fi}\fi
\if@tempswa \if@filesw \let\@auxout=\@partaux
\immediate\openout\@partaux #1.aux
\immediate\write\@partaux{\relax}\fi\@input{#1.tex}\clearpage
\@writeckpt{#1}\if@filesw \immediate\closeout\@partaux \fi
\let\@auxout=\@mainaux\else\@nameuse{cp@#1}\fi}

\def\@writeckpt#1{\if@filesw 
\immediate\write\@partaux{\string\global\string\@namedef{cp@#1}\@charlb}% 
{\let\@elt\@wckptelt \cl@@ckpt}\immediate\write\@partaux{\@charrb}\fi}

\def\@wckptelt#1{\immediate\write\@partaux
{\string\setcounter{#1}{\the\@nameuse{c@#1}}}}

\def\input{\@ifnextchar \bgroup{\@iinput}{\@@input }}
\def\@iinput#1{\@@input #1 }

% The following defines \@charlb and \@charrb to be { and }, respectively
% with \catcode 11.
{\catcode`[=1 \catcode`]=2
\catcode`{=11 \catcode`}=11
\gdef\@charlb[{]
\gdef\@charrb[}]
]% }brace matching


 \message{env. counters,}
%          ****************************************
%          *     ENVIRONMENT COUNTER MACROS       *
%          ****************************************
%       
%  An environment  foo  has an associated counter defined by the
%  following control sequences:
%    \c@foo  :  Contains the counter's numerical value.  It is defined by 
%                   \newcount\foocounter.  
%    \thefoo : Macro that expands to the printed value of \foocounter.
%              For example, if sections are numbered within chapters, 
%              and section headings look like 
%                  Section II-3.  The Nature of Counters
%              then \thesection might be defined by:
%                 \def\thesection{\@Roman{\c@chapter}-\@arabic{\c@section}}
%
%    \p@foo  : Macro that expands to a printed 'reference prefix' of
%              counter foo.  Any \ref to a value created by counter
%              foo will produce the expansion of \p@foo\thefoo  when the
%              the \label command is executed.
%
% NOTE: \thefoo and \p@foo MUST BE DEFINED IN SUCH A WAY THAT 
% \edef\bar{\thefoo} OR \edef\bar{\p@foo}
% DEFINES \bar SO THAT IT WILL EVALUATE TO THE COUNTER VALUE AT THE TIME
% OF THE \edef, EVEN AFTER \foocounter AND ANY OTHER COUNTERS HAVE BEEN
% CHANGED.  THIS WILL HAPPEN IF YOU USE THE STANDARD COMMANDS \@arabic,
% \@Roman, ETC.
%
%    \cl@foo : List of counters to be reset when foo stepped.  Has format 
%              \@elt{countera}\@elt{counterb}\@elt{counterc}.
%
%  The following commands are used to define and modify counters.
%    \setcounter{FOO}{VAL}  : Globally sets \foocounter equal to VAL.
%    \addtocounter{FOO}{VAL}: Globally increments \foocounter by VAL.
%    \newcounter{NEWCTR}[OLDCTR] : Defines NEWCTR to be a counter, which is 
%                             reset when counter OLDCTR is stepped.  If 
%                             NEWCTR already defined produces 'c@NEWCTR 
%                             already defined' error.  
%    \value{CTR}           : produces the value of counter CTR, for use with 
%                            a \setcounter or \addtocounter command.
%    \stepcounter{FOO}     : Globally increments counter \c@FOO
%                             and resets all subsidiary counters.
%    \refstepcounter{FOO}  : Same a \stepcounter, but it also defines
%                             \@currentreference so that a subsequent
%                             \label{bar} command causes \ref{bar} to
%                             generate the current value of counter foo.
%    \@definecounter{FOO}   : Initializes counter FOO (with empty reset list),
%                             defines \p@FOO and \theFOO to be null.
%                             Also adds FOO to \cl@@ckpt -- the reset
%                             list of a dummy counter @ckpt used for
%                             taking checkpoints.
%    \@addtoreset{FOO}{BAR} : Adds counter FOO to the list of counters
%                             \cl@BAR to be reset when counter bar is stepped.
%
%   NUMBERING MACROS:
%     \arabic{COUNTER} : Representation of COUNTER as arabic numerals.
%                        Changed 29 Apr 86 to make it print the obvious thing
%                        it COUNTER not positive. 
%                          
%     \roman{COUNTER}  : Representation of COUNTER as lower-case 
%                           Roman numerals.
%     \Roman{COUNTER}  : Representation of COUNTER as upper-case 
%                           Roman numerals.
%     \alph{COUNTER}   : Representation of COUNTER as a lower-case
%                           letter: 1 = a, 2 = b, etc.
%     \Alph{COUNTER}   : Representation of COUNTER as an upper-case
%                           letter: 1 = A, 2 = B, etc.
%     \fnsymbol{COUNTER} : Representation of COUNTER as a footnote
%                           symbol: 1 = *, 2 = \dagger, etc.  Can be
%                           used only in math mode.
%
%  THE ABOVE ARE IMPLEMENTED IN TERMS OF THE FOLLOWING:
%     \@arabic\FOOcounter : Representation of \FOOcounter as arabic numerals.
%     \@roman\FOOcounter  : Representation of \FOOcounter as lower-case 
%                           Roman numerals.
%     \@Roman\FOOcounter  : Representation of \FOOcounter as upper-case 
%                           Roman numerals.
%     \@alph\FOOcounter   : Representation of \FOOcounter as a lower-case
%                           letter: 1 = a, 2 = b, etc.
%     \@Alph\FOOcounter   : Representation of \FOOcounter as an upper-case
%                           letter: 1 = A, 2 = B, etc.
%     \@fnsymbol\FOOcounter : Representation of \FOOcounter as a footnote
%                             symbol.  Can be used only in math mode.

\def\setcounter#1#2{\@ifundefined{c@#1}{\@nocnterr}%
{\global\csname c@#1\endcsname#2\relax}}

\def\addtocounter#1#2{\@ifundefined{c@#1}{\@nocnterr}%
{\global\advance\csname c@#1\endcsname #2\relax}}

\def\newcounter#1{\expandafter\@ifdefinable \csname c@#1\endcsname
    {\@definecounter{#1}}\@ifnextchar[{\@newctr{#1}}{}}

\def\value#1{\csname c@#1\endcsname}

\def\@newctr#1[#2]{\@ifundefined{c@#2}{\@nocnterr}{\@addtoreset{#1}{#2}}}

\def\stepcounter#1{\global\expandafter\advance\csname c@#1\endcsname
     \@ne {\let\@elt\@stpelt \csname cl@#1\endcsname}}

\def\@stpelt#1{\global\csname c@#1\endcsname \z@}

\def\cl@@ckpt{\@elt{page}}

\def\@definecounter#1{\expandafter\newcount\csname c@#1\endcsname
     \setcounter{#1}0 \expandafter\gdef\csname cl@#1\endcsname{}\@addtoreset
     {#1}{@ckpt}\expandafter\gdef\csname p@#1\endcsname{}\expandafter
     \gdef\csname the#1\endcsname{\arabic{#1}}}

\def\@addtoreset#1#2{\expandafter\@cons\csname cl@#2\endcsname {{#1}}}

% Numbering commands for definitions of \theCOUNTER and \list arguments.
% \fnsymbol produces the standard footnoting symbols: asterisk, dagger, etc.
% They can be used only in math mode.

\def\arabic#1{\@arabic{\@nameuse{c@#1}}} 
\def\roman#1{\@roman{\@nameuse{c@#1}}}  
\def\Roman#1{\@Roman{\@nameuse{c@#1}}}  
\def\alph#1{\@alph{\@nameuse{c@#1}}}   
\def\Alph#1{\@Alph{\@nameuse{c@#1}}}   
\def\fnsymbol#1{\@fnsymbol{\@nameuse{c@#1}}}

\def\@arabic#1{\number #1}  %% changed 29 Apr 86
\def\@roman#1{\romannumeral #1}
\def\@Roman#1{\expandafter\uppercase\expandafter{\romannumeral #1}}
\def\@alph#1{\ifcase#1\or a\or b\or c\or d\else\@ialph{#1}\fi}
\def\@ialph#1{\ifcase#1\or \or \or \or \or e\or f\or g\or h\or i\or j\or
   k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or
   z\else\@ctrerr\fi}
\def\@Alph#1{\ifcase#1\or A\or B\or C\or D\else\@Ialph{#1}\fi}
\def\@Ialph#1{\ifcase#1\or \or \or \or \or E\or F\or G\or H\or I\or J\or
   K\or L\or M\or N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or X\or Y\or
   Z\else\@ctrerr\fi}
\def\@fnsymbol#1{\ifcase#1\or *\or \dagger\or \ddagger\or 
   \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger
   \or \ddagger\ddagger \else\@ctrerr\fi\relax}




 \message{page nos.,}
%          ****************************************
%          *          PAGE NUMBERING              *
%          ****************************************
%
% Page numbers are produced by a page counter, used just like any other
% counter.  The only difference is that \c@page contains the number of
% the next page to be output (the one currently being produced), rather
% than one minus it.  Thus, it is normally initialized to 1 rather than
% 0.  \c@page is defined to be \count0, rather than a count assigned by
% \newcount.
% 
% The user sets the pagenumber style with the \pagenumbering{FOO}
% command, which sets the page counter to 1 and defines \thepage to be
% \FOO.  For example, \pagenumbering{roman} causes pages to be numbered
% i, ii, etc.  


\countdef\c@page=0 \c@page=1
\def\cl@page{}
\def\pagenumbering#1{\global\c@page \@ne \gdef\thepage{\csname @#1\endcsname
   \c@page}}


 \message{x-ref,}
%          ****************************************
%          *      CROSS REFERENCING MACROS        *
%          ****************************************
%
%  The user writes  \label{foo}  to define the following cross-references:
%     \ref{foo}     : value of most recently incremented referencable counter.
%                     in the current environment. (Chapter, section, theorem 
%                     and enumeration counters counters are referencable, 
%                     footnote counters are not.)
%     \pageref{foo} : page number at which \label{foo} command appeared.
%  where  foo  can be any string of characters not containing '\', '{' or '}'.
%
%  Note: The scope of the \label command is delimited by environments, so 
%          \begin{theorem} \label{foo} ... \end{theorem} \label{bar}
%  defines \ref{foo} to be the theorem number and \ref{bar} to be
%  the current section number.  
%  
%  Note: \label does the right thing in terms of spacing -- i.e.,
%  leaving a space on both sides of it is equivalent to leaving 
%  a space on either side.  
% 
%  This is implemented as follows.  A referencable counter  CNT  is 
%  incremented by the command  \refstepcounter{CNT} , which sets 
%  \@currentlabel == {CNT}{eval(\p@cnt\theCNT)}.   The command  
%  \label{FOO} then writes the following on file \@auxout :
%        \newlabel{FOO}{{eval(\@currentlabel)}{eval(\thepage)}}
%                     
%  \ref{FOO} ==
%    BEGIN
%      if \r@foo undefined  
%        then  ?? 
%              Warning: 'reference foo on page ... undefined'
%        else  \@car \eval(\r@FOO)\@nil
%      fi
%    END
%
%  \pageref{foo} = 
%    BEGIN
%      if \r@foo undefined  
%        then  ?? 
%              Warning: 'reference foo on page ... undefined'
%        else  \@cdr \eval(\r@FOO)\@nil
%      fi
%    END
%

\def\ref#1{\@ifundefined{r@#1}{{\bf ??}\@warning
   {Reference `#1' on page \thepage \space 
    undefined}}{\edef\@tempa{\@nameuse{r@#1}}\expandafter
    \@car\@tempa \@nil\null}}

\def\pageref#1{\@ifundefined{r@#1}{{\bf ??}\@warning
   {Reference `#1' on page \thepage \space 
    undefined}}{\edef\@tempa{\@nameuse{r@#1}}\expandafter
    \@cdr\@tempa\@nil\null}}

\def\newlabel#1#2{\@ifundefined{r@#1}{}{\@warning{Label `#1' multiply
   defined}}\global\@namedef{r@#1}{#2}}

% \label and \refstepcounter changed to allow \protect'ed commands to
% work properly.  For example, 
%   \def\thechapter{\protect\foo{\arabic{chapter}.\roman{section}}}
% will cause a \label{bar} command to define \ref{bar} to expand to
% something like \foo{4.d}.  Change made 20 Jul 88.

\def\label#1{\@bsphack\if@filesw {\let\thepage\relax
   \def\protect{\noexpand\noexpand\noexpand}%
\xdef\@gtempa{\write\@auxout{\string
      \newlabel{#1}{{\@currentlabel}{\thepage}}}}}\@gtempa
   \if@nobreak \ifvmode\nobreak\fi\fi\fi\@esphack}

\def\refstepcounter#1{\stepcounter{#1}\let\@tempa\protect
\def\protect{\noexpand\protect\noexpand}%
\edef\@currentlabel{\csname p@#1\endcsname\csname the#1\endcsname}%
\let\protect\@tempa}

\def\@currentlabel{} % For \label commands that come before any environment

 \message{environments,}
%          ****************************************
%          *            ENVIRONMENTS              *
%          ****************************************
%
%  \begin{foo} and \end{foo} are used to delimit environment foo.
%  \begin{foo} starts a group and calls \foo if it is defined, otherwise
%  it does nothing.  \end{foo} checks to see that it matches the
%  corresponding \begin and if so, it calls \endfoo and does an
%  \endgroup.  Otherwise, \end{foo} does nothing.
%
%  If \end{foo} needs to ignore blanks after it, then \endfoo should
%  globally set the @ignore switch true with \global\@ignoretrue.
%
%  \@currenvir : the name of the current environment.  Initialized to 
%                'document' to make \end{document} work right.
%
%  \@preamblecmds : a list of commands that can be used only in the
%                   preamble (before the \begin{document}), in the
%                   form  \do \CMDA \do \CMDB ... .   These commands
%                   are redefined to \@notprerr by \begin{document}
%                   to save space.  They include the following:
%                       \document \documentstyle \@documentstyle
%                       \@options \@preamblecmds \@optionlist
%                       \@optionfiles \nofiles \includeonly \makeindex
%                       \makeglossary
%                   The document style can add any other commands to 
%                   this list by  
%                      \def\do{\noexpand\do\noexpand}
%                      \edef\@preamblecmds{\@preamblecmds \do ...}
%
%  NOTE: \@@end is defined to be the \end command of TeX82. 
%
%  \enddocument is the user's command for ending the manuscript file.
%
%  \stop is a panic button -- to end TeX in the middle.
%
% \enddocument ==
%   BEGIN
%    \@checkend{document}   %% checks for unmatched \begin
%    \clearpage
%    \begingroup
%      if @filesw = true
%        then  close file @mainaux
%              \global \@namedef {ARG1}{ARG2} == null
%              \newlabel{LABEL}{VAL} ==
%                  BEGIN
%                    \@tempa == VAL
%                    if def(\@tempa) = def(\r@LABEL)
%                      else @tempswa := true          fi
%                  END
%              \bibcite{LABEL}{VAL} == null
%                  BEGIN
%                    \@tempa == VAL
%                    if def(\@tempa) = def(\g@LABEL)
%                      else @tempswa := true          fi
%                  END
%              @tempswa := false
%              make @ a letter
%              \input \jobname.AUX  
%              if @tempswa = true
%                then LaTeX Warning: 'Label may have changed.
%                                     Rerun to get cross-references right.'
%       fi     fi
%    \endgroup
%    finish up
%   END
%
%  \@writefile{EXT}{ENTRY} ==
%      if tf@EXT undefined
%        else \write\tf@EXT{ENTRY}
%      fi
%
\def\@currenvir{document}

\def\@preamblecmds{\do\document \do\documentstyle \do\@documentstyle
   \do\@options \do\@preamblecmds \do\@optionlist \do\@optionfiles
   \do\nofiles \do\includeonly \do\makeindex \do\makeglossary}

\newif\if@ignore

\def\enddocument{\@checkend{document}\clearpage\begingroup  
\if@filesw \immediate\closeout\@mainaux 
\def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
\def\bibcite{\@testdef b}\@tempswafalse \makeatletter\input \jobname.aux
\if@tempswa \@warning{Label(s) may have changed.  Rerun to get
cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}

\def\@testdef #1#2#3{\def\@tempa{#3}\expandafter \ifx \csname #1@#2\endcsname
 \@tempa  \else \@tempswatrue \fi} 

\def\@writefile#1#2{\@ifundefined{tf@#1}{}{\expandafter
   \immediate\write\csname tf@#1\endcsname{#2}}}

\def\stop{\clearpage\deadcycles\z@\let\par\@@par\@@end}

\everypar{\@nodocument} %% To get an error if text appears before the
\nullfont               %% \begin{document}

% \begin, \end, and \@checkend changed so \end{document} will catch
% an unmatched \begin.  Changed 24 May 89 as suggested by
% Frank Mittelbach and Rainer Sch\"opf.


% \begin{NAME} ==
%  BEGIN
%    IF \NAME undefined  THEN  \@tempa == BEGIN report error END
%                        ELSE  \@tempa ==  (\@currenvir :=L NAME) \NAME
%    FI
%    @ignore :=G F      %% Added 30 Nov 88
%    \begingroup            
%    \@currenvir :=L NAME
%    \NAME
%  END

% \end{NAME} ==
%  BEGIN
%   \endNAME
%   \@checkend{NAME}
%   IF @endpe = T                  %% @endpe set True by \@endparenv
%     THEN \@gtempa :=G \@doendpe  %% \@doendpe redefines \par and \everypar
%     ELSE \@gtempa :=G \relax     %% to suppress paragraph indentation in
%   FI                             %% immediately following text
%   \endgroup
%   \@gtempa
%   IF @ignore = T
%     THEN @ignore :=G F
%          \ignorespaces
%   FI
%  END

% \@checkend{NAME} ==
%  BEGIN
%   IF \@currenvir = NAME
%     ELSE \@badend{NAME}
%   FI
%  END

\def\begin#1{\@ifundefined{#1}{\def\@tempa{\@latexerr{Environment #1
  undefined}\@eha}}{\def\@tempa{\def\@currenvir{#1}%
  \csname #1\endcsname}}\begingroup\@endpefalse\@tempa}

\def\end#1{\csname end#1\endcsname\@checkend{#1}%
     \if@endpe\global\let\@gtempa\@doendpe
     \else\global\let\@gtempa\relax\fi
    \endgroup
     \@gtempa
     \if@ignore \global\@ignorefalse
                               \ignorespaces\fi}

\def\@checkend#1{\def\@tempa{#1}\ifx
      \@tempa\@currenvir \else\@badend{#1}\fi}


 \message{math,}
%      **********************************************
%      *               MATH ENVIRONMENTS            *
%      **********************************************
% 
% \( ==  BEGIN  if math mode
%                 then error: '\( in math mode'
%                 else $
%               fi
%        END
%
% \) ==  BEGIN  if math mode
%                 then if inner mode
%                        then $             
%                        else error ``\[ closed with \)''
%                 else error 'unmatched \)'
%               fi
%        END
%
% \[ ==  BEGIN  if math mode
%                 then error: '\[ in math mode'
%                 else $$                   
%               fi
%        END
%
% \] ==  BEGIN  if math mode
%                 then if inner mode
%                        then error '\( closed with \]'
%                        else $$
%                 else error 'unmatched \]'
%               fi
%        END
%
% \equation      ==  BEGIN \refstepcounter{equation} $$ END
%
% \endequation   ==  BEGIN \eqno (\theequation) $$\ignorespaces END
% 
% NOTE: The document style must define \theequation etc., and do
% the appropriate \@addtoreset.  It should also redefine \@eqnnum
% if another format for the equation number is desired other than the
% standard (...), or to move the equation numbers to the flushleft.
% (See comment on the \def of \@eqnnum.)
%
% \stackrel{TOP}{BOT} == PLAIN TeX's \buildrel {TOP} \over {BOT}
%
% \frac{TOP}{BOT} == {TOP \over BOT}
%
% \sqrt[N]{EXP} produces an Nth root of EXP formula.
%
%  \: == \>  (medium space)

\def\({\relax\ifmmode\@badmath\else$%%$BRACE MATCH HACK
\fi}

\def\){\relax\ifmmode\ifinner$\else\@badmath%%$ BRACE MATCH HACK
\fi\else \@badmath\fi}

\def\[{\relax\ifmmode\@badmath\else
    \ifvmode \nointerlineskip \makebox[.6\linewidth]\fi$$%%$$ BRACE MATCH HACK
\fi}

\def\]{\relax\ifmmode\ifinner\@badmath\else$$\fi%%$$ BRACE MATCH HACK
        \else \@badmath \fi\ignorespaces}

\let\math=\(
\let\endmath=\)
\def\displaymath{\[}
\def\enddisplaymath{\]\global\@ignoretrue}

\@definecounter{equation}
\def\equation{$$ % $$ BRACE MATCHING HACK
\refstepcounter{equation}}

\def\endequation{\eqno \@eqnnum % $$ BRACE MATCHING HACK
$$\global\@ignoretrue}

%  \@eqnnum: Produces the equation number for equation and
%     eqnarray environments.  The following definition is for 
%     flushright numbers; for flushleft numbers, see leqno.doc.
%     The {\rm ... } puts the equation number in roman type even if
%     an eqnarray environment appears in an italic environment.
%
\def\@eqnnum{{\rm (\theequation)}} 


\def\stackrel#1#2{\mathrel{\mathop{#2}\limits^{#1}}}
\def\frac#1#2{{#1\over #2}}

\let\@@sqrt=\sqrt
\def\sqrt{\@ifnextchar[{\@sqrt}{\@@sqrt}}
\def\@sqrt[#1]{\root #1\of}

\let\:=\>

% Here's the eqnarray environment:
%  Default is for left-hand side of equations to be flushleft.
%  To make them flushright, \let\@eqnsel = \hfil

\newcount\@eqcnt 
\newcount\@eqpen
\newif\if@eqnsw\@eqnswtrue 

\@centering = 0pt plus 1000pt % Changed 11/4/85 to produce warning message
                              % if line extends into margin.  Doesn't warn
                              % about formula overprinting equation number.

\def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
\global\@eqnswtrue
\global\@eqcnt\z@\tabskip\@centering\let\\=\@eqncr
$$\halign to \displaywidth\bgroup\@eqnsel\hskip\@centering
  $\displaystyle\tabskip\z@{##}$&\global\@eqcnt\@ne 
  \hskip 2\arraycolsep \hfil${##}$\hfil
  &\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle\tabskip\z@{##}$\hfil 
   \tabskip\@centering&\llap{##}\tabskip\z@\cr}

\def\endeqnarray{\@@eqncr\egroup
      \global\advance\c@equation\m@ne$$\global\@ignoretrue}

\let\@eqnsel=\relax

\def\nonumber{\global\@eqnswfalse}

\def\@eqncr{{\ifnum0=`}\fi\@ifstar{\global\@eqpen\@M
    \@yeqncr}{\global\@eqpen\interdisplaylinepenalty \@yeqncr}}

\def\@yeqncr{\@ifnextchar [{\@xeqncr}{\@xeqncr[\z@]}}

\def\@xeqncr[#1]{\ifnum0=`{\fi}\@@eqncr
   \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}}

\def\@@eqncr{\let\@tempa\relax 
    \ifcase\@eqcnt \def\@tempa{& & &}\or \def\@tempa{& &} 
      \else \def\@tempa{&}\fi 
     \@tempa \if@eqnsw\@eqnnum\stepcounter{equation}\fi
     \global\@eqnswtrue\global\@eqcnt\z@\cr}

% Here's the eqnarray* environment:

\let\@seqncr=\@eqncr
\@namedef{eqnarray*}{\def\@eqncr{\nonumber\@seqncr}\eqnarray}
\@namedef{endeqnarray*}{\nonumber\endeqnarray}

% \lefteqn{FORMULA} typesets FORMULA in display math style
%  flushleft in a box of width zero.
%

\def\lefteqn#1{\hbox to \z@{$\displaystyle #1$\hss}}


 \message{center,} 
%      ************************************************
%      *      CENTER, FLUSHRIGHT, FLUSHLEFT, ETC.     *
%      ************************************************
%
% 
% \center, \flushright and \flushleft set 
%   \rightskip = 0pt or \@flushglue (as appropriate)
%   \leftskip  = 0pt or \@flushglue (as appropriate)
%   \parindent = 0pt
%   \parfillskip   = 0pt. (except \flushleft)
%   \\         == \par \vskip -\parskip
%   \\[LENGTH] == \\ \vskip LENGTH 
%   \\*        == \par \penalty 10000 \vskip -\parskip
%   \\*[LEN]   == \\* \vskip LENGTH 
%
% They invoke the trivlist environment to handle vertical spacing before
% and after them.
%
% \centering, \raggedright and \raggedleft are the declaration analogs
% of the above.
%
% \raggedright has a more universal effect, however.  It sets
% \@rightskip := flushglue.  Every environment, like the list environments,
% that set \rightskip to its 'normal' value set it to \@rightskip

\def\@centercr{\ifhmode \unskip\else \@badcrerr\fi
       \par\@ifstar{\penalty \@M\@xcentercr}{\@xcentercr}}

\def\@xcentercr{\addvspace{-\parskip}\@ifnextchar 
    [{\@icentercr}{\ignorespaces}}

\def\@icentercr[#1]{\vskip #1\ignorespaces}

\def\center{\trivlist \centering\item[]}
\def\centering{\let\\=\@centercr\rightskip\@flushglue\leftskip\@flushglue
\parindent\z@\parfillskip\z@}
\let\endcenter=\endtrivlist

\newskip\@rightskip \@rightskip \z@

\def\flushleft{\trivlist \raggedright\item[]}
\def\raggedright{\let\\=\@centercr\@rightskip\@flushglue \rightskip\@rightskip
  \leftskip\z@
  \parindent\z@}
\let\endflushleft=\endtrivlist

\def\flushright{\trivlist \raggedleft\item[]}
\def\raggedleft{\let\\=\@centercr\rightskip\z@\leftskip\@flushglue
  \parindent\z@\parfillskip\z@}
\let\endflushright=\endtrivlist

 \message{verbatim,}
%       ****************************************
%       *              VERBATIM                *
%       ****************************************
%
%  The verbatim environment uses the fixed-width \tt font, turns blanks into 
%  spaces, starts a new line for each carrige return (or sequence of 
%  consecutive carriage returns), and interprets EVERY character literally.
%  I.e., all special characters \, {, $, etc. are \catcode'd to 'other'.
%
%  The command \verb produces in-line verbatim text, where the argument
%  is delimited by any pair of characters.  E.g., \verb #...# takes
%  '...' as its argument, and sets it verbatim in \tt font.
%
%  The *-variants of these commands is the same, except that spaces
%  print as the TeXbook's space character instead of as blank spaces.

{\catcode`\^^M=13 \gdef\@gobblecr{\@ifnextchar
{\@gobble}{\ignorespaces}}}

{\catcode`\ =\active\gdef\@vobeyspaces{\catcode`\ \active\let \@xobeysp}}
 
% Definition of \@xobeysp chaned on 19 Nov 86 from
% \def\@xobeysp{\leavevmode{} }
% to prevent line breaks at spaces.  Change suggested by
% Nelson Beebe
%
\def\@xobeysp{\leavevmode\penalty10000\ }



\begingroup \catcode `|=0 \catcode `[= 1
\catcode`]=2 \catcode `\{=12 \catcode `\}=12
\catcode`\\=12 |gdef|@xverbatim#1\end{verbatim}[#1|end[verbatim]]
|gdef|@sxverbatim#1\end{verbatim*}[#1|end[verbatim*]]
|endgroup

% \@sverbatim obsolete -- removed 24 May 89, as suggested by
% Rainer Sch\"opf and Frank Mittelbach
% \def\@sverbatim{\obeyspaces\@verbatim} 

\def\@gobble#1{}

\def\@verbatim{\trivlist \item[]\if@minipage\else\vskip\parskip\fi
\leftskip\@totalleftmargin\rightskip\z@
\parindent\z@\parfillskip\@flushglue\parskip\z@
\@tempswafalse \def\par{\if@tempswa\hbox{}\fi\@tempswatrue\@@par}
\obeylines \tt \catcode``=13 \@noligs \let\do\@makeother \dospecials}

\def\verbatim{\@verbatim \frenchspacing\@vobeyspaces \@xverbatim}
\let\endverbatim=\endtrivlist

\@namedef{verbatim*}{\@verbatim\@sxverbatim}
\expandafter\let\csname endverbatim*\endcsname =\endtrivlist


\def\@makeother#1{\catcode`#112\relax}

\def\verb{\begingroup \catcode``=13 \@noligs 
\tt \let\do\@makeother \dospecials 
\@ifstar{\@sverb}{\@verb}}

% Definitions of \@sverb and \@verb changed so \verb+ foo+  does not lose
% leading blanks when it comes at the beginning of a line.
% Change made 24 May 89. Suggested by Frank Mittelbach and Rainer Sch\"opf.
%
\def\@sverb#1{\def\@tempa ##1#1{\leavevmode\null##1\endgroup}\@tempa}

\def\@verb{\@vobeyspaces \frenchspacing \@sverb}


%% \@noligs prevents ?` and !` from being treated as ligatures
%% added 19 April 86


\begingroup
\catcode``=13
\gdef\@noligs{\let`=\@lquote}
\endgroup

\def\@lquote{{\kern\z@}`}
 \message{list,}
%       ****************************************
%       *         THE LIST ENVIRONMENT         *
%       ****************************************
%
% The generic commands for creating an indented environment -- enumerate,
% itemize, quote, etc -- are 
%        \list{LABEL}{COMMANDS} ... \endlist
% which can be invoked by the user as the list environment.  The LABEL
% argument specifies item labeling.  COMMANDS contains commands for
% changing the horizontal and vertical spacing parameters.
%
% Each item of the environment is begun by the command \item[ITEMLABEL]
% which produces an item labeled by ITEMLABEL.  If the argument is
% missing, then the LABEL argument of the \list command is used as the
% item label.  
%
% The label is formed by putting \makelabel{ITEMLABEL} in an hbox whose
% width is either its natural width or else \labelwidth, whichever is
% larger.  The \list command defines \makelabel to have the default
% definition
%     \makelabel{ARG} == BEGIN \hfil ARG END
% which, for a label of width less than \labelwidth, puts the label
% flushright, \labelsep to the left of the item's text.  However,
% \makelabel can be \let to another command by the \list's COMMANDS
% argument.
%
% A \usecounter{foo} command in the second argument causes the counter
% foo to be initialized to zero, and stepped by every \item command
% without an argument.  (\label commands within the list refer to this
% counter.)
%
% When you leave a list environment, returning either to an enclosing
% list or normal text mode, LaTeX begins a new paragraph if and only if
% you leave a blank line after the \end command.  This is accomplished
% by the \@endparenv command.
%
% Blank lines are ignored every other reasonable place--i.e.:
%     - Between the \begin{list} and the first \item,
%     - Between the \item and the text of that item.
%     - Between the end of the last item and the \end{list}.
%
% For an environment like quotation, in which items are not labeled,
% the enrs[ast itemtrivlist

\newst il\begin{list} and the first \item,
%     - Between the \item and the text of that item.
%     - Between the end of the last item and the \end{list}.
%
% For an environment like quotation, in which items are not labeled,
% the enrs[ast ite noa ny il
\newst combegin{list} and the first \item,
%     - Between the \item and the text of that item.
%     - Between the end of the last item and the \end{list}.
%
% For an environment like quotation, in which items are not labeled,
% the enrs[ast ite noa ny il
\newst combegin{list} and the first \item,
%     - Between the \item and the text of that item.
%     - Between the end of the last item and the \end{list}.
%
% For an environment like quotation, in which items are not labeled,
% the enrs[ast ite noa ny il
\newst combegin{list} and the first \item,
%     - Between the \item and the text of that item.
%     nrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnrsnr